C# ASP.NET dropdownlist selectedIndexChanged未被触发

C# ASP.NET dropdownlist selectedIndexChanged未被触发,c#,asp.net,.net,visual-studio,C#,Asp.net,.net,Visual Studio,我正在尝试创建一个表单作为网站的一部分。在表单中,用户会看到一个带有多个选项的下拉列表。如果用户选择“其他”选项,则应向其显示一个文本框,以填写“其他”选项的说明 我的想法是隐藏包含文本框的div,并在用户将下拉列表选项更改为“其他”时启用它 我遇到一个问题,在asp.net中,dropdownlist“selectedindexchanged”事件未被触发。下面是HTML代码和cs代码 <%@ Page Title="" Language="C#"

我正在尝试创建一个表单作为网站的一部分。在表单中,用户会看到一个带有多个选项的下拉列表。如果用户选择“其他”选项,则应向其显示一个文本框,以填写“其他”选项的说明

我的想法是隐藏包含文本框的div,并在用户将下拉列表选项更改为“其他”时启用它

我遇到一个问题,在asp.net中,dropdownlist“selectedindexchanged”事件未被触发。下面是HTML代码和cs代码

<%@ Page Title="" Language="C#" MasterPageFile="~/master/Site1.Master" AutoEventWireup="true" CodeBehind="form.aspx.cs" Inherits="Project.forms.form" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="menu" runat="server">
    </asp:Content>
    <asp:Content ID="Content3" ContentPlaceHolderID="Banner" runat="server">
        <img src="../../image.jpg" class="img-responsive" alt="Responsive image" />
    </asp:Content>
    <asp:Content ID="Content4" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    </asp:Content>
    <asp:Content ID="Content5" ContentPlaceHolderID="ContentPlaceHolder2" runat="server">
         
      <h2 class="branding_orange">Form</h2>
        <div class="alert alert-danger" name="warningDiv" style="margin-top:10px" id="warningDiv" role="alert" runat="server">
            <p name="warningMsg" id="warningMsg" runat="server"></p>
        </div>
      <form id="compliantForm" role="form" class="form" runat="server" data-toggle="validator" onsubmit="return validation();">
          <div class="row">
               .
               .
               .
              <div class="col-xs-12 col-sm-6 col-md-4">
                  <div class="form-group">
                       <label for="person-submitting-select">Is the person submitting this complaint an: <b style="color:red">*</b></label>&nbsp;
                     <asp:DropDownList ID="cboPersonSubmitting" runat="server" AutoPostBack = "True" OnSelectedIndexChanged = "OnSelectedIndexChanged">
                        <asp:ListItem Text="select" Value="0" />
                        <asp:ListItem Text="Employee" Value="1" />
                        <asp:ListItem Text="Customer" Value="2" />
                        <asp:ListItem Text="Other" Value="3" />
                    </asp:DropDownList>
    
                  </div>
    
              </div>
    .
    .
    .
    .
        
    </asp:Content>
    
    <asp:Content ID="Content6" ContentPlaceHolderID="ContentPlaceHolder3" runat="server">
    </asp:Content>

根据我的测试,当您在dropdownlist中选择Other时,您可以尝试以下代码来显示textbox

Html:

结果:


根据我的测试,当您在下拉列表中选择“其他”时,可以尝试以下代码来显示文本框

Html:

结果:


可能会检查验证javascript函数是否已触发,并且它是否会在大多数情况下结束回发,因为您忘记了autopostback属性:。但事实并非如此。事实上,它应该起作用。你能不能找到一个断点,看看它是否着火了?或者在if之前在标签上写些东西。然后将该下拉列表移出表单,看看它是否相关。@DragandDrop我在“OnSelectedIndexChanged”函数中添加了一个断点,并注意到当下拉列表中的项发生更改时,它不会到达该断点。关于在表单外部获取dropdownlist,我需要它在表单内部,因为dropdownlist的值将在表单中获取并验证。调试通常需要隔离。单独测试时,更容易知道零件是否损坏。这是指导方针的一部分,我建议每天在Stackoverflow之外。如果是表单错误,我们需要关于如何用验证js代码重现该问题的信息。拆下每一个,直到它工作。把东西一个接一个地加回去。直到它崩溃。我认为您必须检查javascript代码,如果它返回false,表单提交将停止。可能需要检查验证javascript函数是否被触发,并且它是否在大多数情况下不会触发Postback,因为您忘记了autopostback属性:。但事实并非如此。事实上,它应该起作用。你能不能找到一个断点,看看它是否着火了?或者在if之前在标签上写些东西。然后将该下拉列表移出表单,看看它是否相关。@DragandDrop我在“OnSelectedIndexChanged”函数中添加了一个断点,并注意到当下拉列表中的项发生更改时,它不会到达该断点。关于在表单外部获取dropdownlist,我需要它在表单内部,因为dropdownlist的值将在表单中获取并验证。调试通常需要隔离。单独测试时,更容易知道零件是否损坏。这是指导方针的一部分,我建议每天在Stackoverflow之外。如果是表单错误,我们需要关于如何用验证js代码重现该问题的信息。拆下每一个,直到它工作。把东西一个接一个地加回去。我认为您必须检查javascript代码,如果返回false,表单提交将停止。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;


namespace Project.forms
{
    public partial class form : System.Web.UI.Page
    {
        
        protected void Page_Load(object sender, EventArgs e)
        {
            cboPersonSubmitting.AutoPostBack = true;
            warningDiv.Visible = false;
            warningMsg.InnerHtml = "";
            
            
        }
        .
        .
        .

        protected void OnSelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboPersonSubmitting.SelectedIndex == 3)
            {
                whoSubmittingDiv.Visible = true;
            }
            else
            {
                whoSubmittingDiv.Visible = false;
            }
        }
    }
}
 <form id="form1" runat="server">
        <div class="col-xs-12 col-sm-6 col-md-4">
                  <div class="form-group">
                       <label for="person-submitting-select">Is the person submitting this complaint an: <b style="color:red">*</b></label>&nbsp;
                     <asp:DropDownList ID="cboPersonSubmitting" runat="server" AutoPostBack = "True" OnSelectedIndexChanged="cboPersonSubmitting_SelectedIndexChanged">
                        <asp:ListItem Text="select" Value="0" />
                        <asp:ListItem Text="Employee" Value="1" />
                        <asp:ListItem Text="Customer" Value="2" />
                        <asp:ListItem Text="Other" Value="3" />
                    </asp:DropDownList>
                      <div class="Submitdiv" id="thediv" runat="server" visible="false"> 
                          <asp:TextBox ID="txtInput" runat="server" ></asp:TextBox>
                      </div>
    
                  </div>
    
              </div>
    </form>
 protected void cboPersonSubmitting_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboPersonSubmitting.SelectedIndex == 3)
            {
                thediv.Visible = true;
            }
            else
            {
                thediv.Visible = false;
            }
        }