更新面板中gridview中的下拉列表,用于触发客户端确认框

时间:2010-11-19 16:46:57

标签: asp.net gridview drop-down-menu updatepanel

  • 我有一个gridview。
  • Gridview位于更新面板中。
  • 我在gridview的模板列中添加了一个下拉列表。
  • 我将autopostback设置为true。
  • 我有使用selectedindexchanged事件的代码

所有这些都很有效

现在我想在客户端更改下拉列表时添加一个javascript确认提示 我让它弹出确认框,但无论用户选择什么(确定或取消)它都不会回发

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

1 个答案:

答案 0 :(得分: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属性将变为冗余(并且实际上会被忽略)。