我正在开发一个asp.net webform应用程序。在一个页面中,我有一个包含一些值的下拉列表(" a"," b"," c",...)。当我在此下拉列表中选择一个值时,会引发服务器端事件,并在我的数据库中写入所选值。 这是代码:
<asp:DropDownList ID="myDdl" runat="server" OnSelectedIndexChanged="server_handler" AutoPostBack="True"/>
protected void server_handler(object sender, EventArgs e)
{
myUpdateMethod(this.myDdl.selectedValue);
}
这是完美的工作,但现在我想在选择值时在客户端询问确认,我们是否真的想更新数据库中的值。 如果我们在js的确认对话框中选择了yes,我们就像以前一样追求并调用服务器,如果不是,我们就停止回发。但这是我无法做到的,我无法阻止回发,这就是我所尝试过的:
<asp:DropDownList ID="myDdl" runat="server" OnSelectedIndexChanged="server_handler" AutoPostBack="True" onchange="confirmornot(event)"/>
function confirmornot(event)
{
var str = confirm("do you want to continue?")
if (!str)// the user select no and this is where I am trying to stop to calling the server handler function. Basically there, I want here nothing to happen
{
//solution 1
event.preventDefault();
//solution 2
event.stopPropagation() or event.stopImmediatePropagation()
//solution 3
return false or return true
}
这些解决方案都不起作用,服务器端功能被调用,我认为这是因为我的autpostback =&#34; true&#34;在我的醉酒,但如果我删除 这个,那么我将遇到相反的问题,我的服务器端功能永远不会被调用。
提前感谢您的帮助
答案 0 :(得分:1)
你可以试试这个:
将ClientIDMode =“Static”设为asp net下拉列表,以便您拥有静态ID“myDdl”并将autopostback设置为false
在confirmornot方法而不是return语句中,尝试 __doPostBack( 'myDdl');
答案 1 :(得分:0)
我有一个hacky解决方案
<强> HTML 强>
添加隐藏字段
<asp:HiddenField runat="server" ID="hdntocheck" />
DDL标记
<asp:DropDownList ID="myDdl" runat="server" OnSelectedIndexChanged="server_handler" AutoPostBack="True" onchange="confirmornot()"/>
<强>的js 强>
function confirmornot() {
if (!confirm("do you want to continue?"))
{
hdntocheck.value = "false";
}
else {
hdntocheck.value = "true";
}
}
在Cs中
protected void server_handler(object sender, EventArgs e)
{
if( hdntocheck.value =="true")
{
myUpdateMethod(this.myDdl.selectedValue);
}
}