所有这些都很有效
现在我想在客户端更改下拉列表时添加一个javascript确认提示 我让它弹出确认框,但无论用户选择什么(确定或取消)它都不会回发
<asp:DropDownList ID="ddlWinnerStatus" runat="server" CssClass="winStatusDDL" OnChange="return ShowWarning(this);"AutoPostBack="true" OnSelectedIndexChanged="ddlWinnerStatus_OnSelectedIndexChanged"></asp:DropDownList>
答案 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(...);">
这实际上更复杂,因为AutoPostBack
是true
因此插入了对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
属性将变为冗余(并且实际上会被忽略)。