Javascript 防止在js中为webform下拉列表回发
我正在开发一个asp.NETWebForm应用程序。在一个页面中,我有一个下拉列表,其中包含一些值(“a”、“b”、“c”…)。当我在此下拉列表中选择一个值时,将引发一个服务器端事件,并将所选值写入数据库。 代码如下:Javascript 防止在js中为webform下拉列表回发,javascript,c#,jquery,asp.net,webforms,Javascript,C#,Jquery,Asp.net,Webforms,我正在开发一个asp.NETWebForm应用程序。在一个页面中,我有一个下拉列表,其中包含一些值(“a”、“b”、“c”…)。当我在此下拉列表中选择一个值时,将引发一个服务器端事件,并将所选值写入数据库。 代码如下: <asp:DropDownList ID="myDdl" runat="server" OnSelectedIndexChanged="server_handler" AutoPostBack="True"/> protected void server_hand
<asp:DropDownList ID="myDdl" runat="server" OnSelectedIndexChanged="server_handler" AutoPostBack="True"/>
protected void server_handler(object sender, EventArgs e)
{
myUpdateMethod(this.myDdl.selectedValue);
}
受保护的void服务器\u处理程序(对象发送方、事件参数e)
{
myUpdateMethod(this.myDdl.selectedValue);
}
这是完美的工作,但现在我想在我的客户端上请求确认,当选择一个值时,我们是否真的要更新我的数据库中的值。
如果我们在js中的“确认”对话框中选择了“是”,我们会像以前一样追踪并调用服务器,否则我们会停止回发。但这是我无法做到的,我无法阻止回发,这是我尝试过的:
<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
}
功能确认人(事件)
{
var str=confirm(“是否要继续?”)
if(!str)//用户选择no,这就是我试图停止调用服务器处理程序函数的地方。基本上,我不希望在这里发生任何事情
{
//解决方案1
event.preventDefault();
//解决方案2
event.stopPropagation()或event.stopImmediatePropagation()
//解决方案3
返回false或返回true
}
这些解决方案都不起作用,不管我放什么,服务器端函数都会被调用,我想这是因为我的drodown上有autpostback=“true”,但是如果我删除
这样,我就会遇到相反的问题,我的服务器端函数永远不会被调用
提前感谢您的帮助您可以尝试以下方法:
我有一个简单的解决方案给你 HTMl 添加一个隐藏字段
<asp:HiddenField runat="server" ID="hdntocheck" />
在Cs中
function confirmornot() {
if (!confirm("do you want to continue?"))
{
hdntocheck.value = "false";
}
else {
hdntocheck.value = "true";
}
}
protected void server_handler(object sender, EventArgs e)
{
if( hdntocheck.value =="true")
{
myUpdateMethod(this.myDdl.selectedValue);
}
}
回发是由onchange标记中的uu doPostBack js完成的,您应该做的是从下拉列表中删除autopostback=“true”,然后从confirmornotThanks内部执行[u doPostBack(“”,);],它可以完美地工作。
protected void server_handler(object sender, EventArgs e)
{
if( hdntocheck.value =="true")
{
myUpdateMethod(this.myDdl.selectedValue);
}
}