C# 对dropdownlist上的某些选项禁用事件/刷新

C# 对dropdownlist上的某些选项禁用事件/刷新,c#,javascript,asp.net,events,html-select,C#,Javascript,Asp.net,Events,Html Select,这是我的ASP.NET页面的一部分 <asp:DropDownList ID="DropDownList1" runat="server" OnChange="return ListChange(this.value)" onselectedindexchanged="DropDownList1_SelectedIndexChanged1" AutoPostBack="True" >

这是我的ASP.NET页面的一部分

<asp:DropDownList ID="DropDownList1" runat="server"  
            OnChange="return ListChange(this.value)" 
            onselectedindexchanged="DropDownList1_SelectedIndexChanged1" 
            AutoPostBack="True" >
            <asp:ListItem Selected="True">Today</asp:ListItem>
            <asp:ListItem>Yesterday</asp:ListItem>
            <asp:ListItem Value="1">Specific Day</asp:ListItem>
            <asp:ListItem>All Time</asp:ListItem>
</asp:DropDownList>
<asp:TextBox ID="txtDate" runat="server"></asp:TextBox>
这里的目标是根据用户选择的选项显示某些数据。在“特定日期”选项中,会向用户显示一个文本框,以便通过javascript插入日期。但也会引发调用服务器的
onselectedindexchanged
事件。我想在选择“特定日期”选项时停止事件,但在选择其他选项时运行


OnChange=“return ListChange(this.value)”
上的代码没有像使用带按钮的表单时那样停止事件。

我建议您使用.net代码进行显示和隐藏

例如在VB.net中

将以下代码放入DropDownList 1\u SelectedIndexChanged1子菜单中

   If DropDownList1.SelectedValue = "1" Then
        txtDate.Visible = True
    Else
        txtDate.Visible = False
    End If
而不是有3个不同的点击/更改事件

然后删除JS和on change和on client click事件,只需将其保留为onselectedindexchanged=“DropDownList1\u SelectedIndexChanged1”

更新:

如果要避免代码中某些事件的回发,请执行以下操作:

如果isPostBack=True

//不要填表格

否则

//填表


如果这是您可以使用的选项之一,则结束

  • 从标记中删除选定的索引更改事件
  • 在更改事件上,检查验证是否正确运行
  • 如果他们已经运行了ajax请求并完成您的工作

  • 您不需要同时调用两个单独的函数。下面是一些jquery代码,只需几行就可以完成这项任务

    $(document).ready(function(){
        $('#DropDownList1').change(fnction(){
            if($(this).text() != 'Specific Day') {
              document.getElementById("txtDate").setAttribute("style", "visibility:hidden;");
               return true;
            } else {
              document.getElementById("txtDate").setAttribute("style", "visibility:visible;");
              return false;
            } 
        });
    });
    

    默认情况下,如果您给出AutoPostBack=true,ASP.Net将回发

    它不考虑返回值

    下面是执行时呈现的代码。它使用settimeout和executed\u doPostBack提交表单

    onchange="return ListChange(this);setTimeout(&#39;__doPostBack(\&#39;ctl00$MainContent$DropDownList1\&#39;,\&#39;\&#39;)&#39;, 0)"
    

    我们需要考虑通过设置一个标志(如Page_IsValid=false)来停止表单提交

    首先尝试检查javascript函数中的值

    如果未显示所选值,请使用以下代码

    var index = document.getElementById(selectItem).selectedIndex;
    
        alert("value =" + document.getElementById(selectItem).value);
        alert("text =" + document.getElementById(selectItem).options[index].text);
    
    或者使用jQuery


    $(“#您的DropDownId选项:选中”).text()

    理想情况下,它应该可以工作,您是否尝试过将其更改为类似onchange=“Javascript:return ListChange(this.value);”的内容,从而停止所有选项的事件:/n按您所说的操作将在每次选择选项时刷新页面。如果他想附加任何代码,SelectIndexChange和AutoPostBack=“True”将始终回发。这就是它的工作原理。感谢您指出,但是我们可以为所选的某些选项禁用回发吗?遗憾的是,如果您想确保表单没有被其他数据填充,请检查isPostBack=True,这将在运行代码之前进行检查。检查我的更新。如果您想避免页面看起来像是在刷新,还可以查看更新面板和内容模板。更新面板和内容模板将使它看起来像什么都没有发生,没有网页闪光。我已经测试。我的javascript正常工作以获取所选值。
    var index = document.getElementById(selectItem).selectedIndex;
    
        alert("value =" + document.getElementById(selectItem).value);
        alert("text =" + document.getElementById(selectItem).options[index].text);