【问题标题】:Dropdownlist in gridview in update panel to trigger client-side confirm box更新面板中gridview中的下拉列表以触发客户端确认框
【发布时间】:2010-11-19 16:46:56
【问题描述】:
  • 我有一个网格视图。
  • Gridview 位于更新面板中。
  • 我在 gridview 的模板列中添加了一个下拉列表。
  • 我已将自动回发设置为 true。
  • 我有代码在 selectedindexchanged 事件中工作

所有这些都很棒

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

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

【问题讨论】:

  • 你能发布函数 ShowWarning() 吗?
  • ...以及 UpdatePanel 的标记。你有 ChildrenAsTriggers="true" 吗?
  • ...和 ​​OnSelectedIndexChanged 事件代码?

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


【解决方案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 属性将变得多余(实际上会被忽略)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 2011-10-09
    相关资源
    最近更新 更多