1

I have following code in my .aspx

<td>
  <script type="text/javascript" language="javascript">\
    function ShowConfirm() {
      if (confirm("Are you sure?") == true)
        return true;
      else
        return false;
    }
  </script>
  <asp:DropDownList ID="ddl1s"  runat="server"  
     onselectedindexchanged="ddl1_SelectedIndexChanged" AutoPostBack="True">
  </asp:DropDownList>
</td>

I have following code in my aspx.cs

protected void ddlEnrollmentStatus_SelectedIndexChanged(object sender, EventArgs e)
{
   ddl1.Attributes.Add("onchange", "ShowConfirm();");
}

I have two items in my dropdownlist (Yes and No)

When I select 2nd item from the list, my page refreshes and I get w/e I set up in Page_Load event.

What am I doing wrong? I am trying to create a confirmbox where it asks user to verify if the value they selected is what they intended to select. If they press Yes, change the value to w/e they selected. if they press no, revert back to original value.

4

4 回答 4

3

如果您有完全的客户端验证,最简单的方法是尽可能只在客户端代码中进行:

<asp:DropDownList ID="ddl1s"  runat="server" 
    onselectedindexchanged="ddl1_SelectedIndexChanged" 
    AutoPostBack="True" onchange="return ShowConfirm();">
</asp:DropDownList>

服务器和客户端事件的混合变得非常混乱,因为首先发生所有服务器处理,然后将页面发送到用户的浏览器,然后运行所有客户端事件(并且在每次往返服务器之间丢失所有客户端上下文)。您当前的代码是说:

  1. 用户更改 DropDown 值。
  2. 往返服务器。
  3. 服务器发送带有onchange.
  4. 什么都没发生。 onchange当用户实际更改值 (1) 时它不存在,并且它现在不会触发,因为页面是在不知道更改的情况下重新加载的。
于 2013-03-12T15:50:41.763 回答
1

你可以这样使用。

ddl1.Attributes.Add("onchange", "return ShowConfirm();");

在页面加载事件中使用它。

或将其与您的 html (.aspx) 页面绑定。

<asp:DropDownList ID="ddl1s"  runat="server" onchange="return ShowConfirm();"
 onselectedindexchanged="ddl1_SelectedIndexChanged" AutoPostBack="True">
于 2013-03-12T15:50:18.213 回答
1

我不是 100% 确定,但我认为你需要这个:

ddl1.Attributes.Add("onchange", "return ShowConfirm();");

看看我写的“return”。

你也可以用这个来简化你的javascript:

function ShowConfirm() {
  return confirm("Are you sure?") == true;
}
于 2013-03-12T15:47:16.103 回答
1

AutoPostBack="True"是错误的代码行。这会导致控件回发;但是,它在回发时不会跟踪新值,而是跟踪旧值。

您只需要正确触发您的事件。首先将此属性设置为 False;然后确定您页面上的哪些内容负责执行 PostBack。

于 2013-03-12T16:14:32.763 回答