阻止js中的回发以获取webform下拉列表

时间:2016-03-24 13:27:10

标签: javascript c# jquery asp.net webforms

我正在开发一个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;在我的醉酒,但如果我删除 这个,那么我将遇到相反的问题,我的服务器端功能永远不会被调用。

提前感谢您的帮助

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

  1. 将ClientIDMode =“Static”设为asp net下拉列表,以便您拥有静态ID“myDdl”并将autopostback设置为false

  2. 在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);
  }


}