2010-11-19 50 views
1
  • 我有一个gridview。
  • 在GridView是在更新面板。
  • 我在gridview的模板列中添加了一个下拉列表。
  • 我将autopostback设置为true。
  • 我有一些代码在SelectedIndexChanged事件工作

所有这一切的伟大工程更新面板中的gridview dropdownlist触发客户端确认框

现在我想在下拉菜单 我把它弹出的的客户端更改添加一个JavaScript确认提示确认框,但不管是什么用户选择(确定或取消),它不回发

<asp:DropDownList ID="ddlWinnerStatus" runat="server" CssClass="winStatusDDL" OnChange="return ShowWarning(this);"AutoPostBack="true" OnSelectedIndexChanged="ddlWinnerStatus_OnSelectedIndexChanged"></asp:DropDownList> 
+0

你能后的功能ShowWarning()? – 2010-11-19 17:42:36

+0

...和UpdatePanel的标记。你有ChildrenAsTriggers =“真”吗? – 2010-11-19 18:08:14

+0

...和OnSelectedIndexChanged事件代码? – jwiscarson 2010-11-19 19:26:15

回答

1

首先,DropDownList类不公开的OnChange财产,所以我猜你正在做的事情,如:

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    ddlWinnerStatus.Attributes.Add("onchange", "return ShowWarning(this);"); 
} 

现在的问题是,引擎盖,下拉列表下会连接回发调用现有onchange属性,这就给类似:

<select onchange="return ShowWarning(this); __doPostBack(...);"> 

这实际上是比较复杂的,因为AutoPostBacktrue所以window.setTimeout()额外的呼叫被插入,但这是它的精神,你可以看到__doPostBack()不会被调用,因为你总是回报尽早从处理者处获得。

达到你想要什么,你会做所有自己的工作,用GetPostBackEventReference()生成到__doPostBack()适当的呼叫:

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    ddlWinnerStatus.Attributes.Add("onchange", 
     String.Format(CultureInfo.InvariantCulture, 
      "if (ShowWarning(this)) {{ {0}; return true; }} else return false;", 
      ClientScript.GetPostBackEventReference(ddlWinnerStatus, ""))); 
} 

注意,如果你这样做,AutoPostBack属性变得多余(并被有效地忽略)。