下拉列表 - 确认 - 问题

时间:2013-03-12 15:43:35

标签: c# javascript asp.net .net

我的.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>

我的aspx.cs中有以下代码

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

我的下拉列表中有两项(是和否)

当我从列表中选择第二项时,我的页面刷新,而且我在Page_Load事件中设置了w / e。

我做错了什么?我正在尝试创建一个确认框,它要求用户验证他们选择的值是否是他们想要选择的值。如果他们按是,则将值更改为他们选择的w / e。如果他们按否,则恢复原始值。

4 个答案:

答案 0 :(得分:3)

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

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

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

  1. 用户更改DropDown值。
  2. 往返服务器。
  3. 服务器使用onchange发送JavaScript代码。
  4. 什么都没发生。当用户实际更改了值(1)时,onchange不存在,并且它现在不会触发,因为页面是在没有更改知识的情况下新加载的。

答案 1 :(得分:1)

我不是百分百肯定,但我认为你需要这个:

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

看看我写的“回归”。

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

function ShowConfirm() {
  return confirm("Are you sure?") == true;
}

答案 2 :(得分:1)

你可以这样使用。

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

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

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

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

答案 3 :(得分:1)

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

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