我的.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。如果他们按否,则恢复原始值。
答案 0 :(得分:3)
如果你有完全的客户端验证,最简单的方法是尽可能在客户端代码中进行验证:
<asp:DropDownList ID="ddl1s" runat="server"
onselectedindexchanged="ddl1_SelectedIndexChanged"
AutoPostBack="True" onchange="return ShowConfirm();">
</asp:DropDownList>
服务器和客户端事件的混合变得非常混乱,因为首先发生所有服务器处理,然后将页面发送到用户的浏览器,然后运行所有客户端事件(并且每次往返之间的所有客户端上下文都丢失服务器)。您当前的代码是:
onchange
发送JavaScript代码。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的内容。