Javascript 防止在js中为webform下拉列表回发

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.NETWebForm应用程序。在一个页面中,我有一个下拉列表,其中包含一些值(“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);
}

受保护的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”,但是如果我删除 这样,我就会遇到相反的问题,我的服务器端函数永远不会被调用

提前感谢您的帮助

您可以尝试以下方法:

  • 将ClientIDMode=“Static”设置为asp net下拉列表,这样您将具有静态id“myDdl”,并且还将autopostback设置为false

  • 在confirmornot方法而不是return语句中,尝试 __doPostBack(“myDdl”)


  • 我有一个简单的解决方案给你

    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);
      }
    
    
    }