在页面加载时禁用下拉列表

时间:2014-01-02 15:34:31

标签: c# javascript asp.net

我在数据库中填充了2个下拉列表: 我想要的是在页面加载时禁用第二个,当第一个的值==“1”时。

这是我的第二个下拉列表:

<asp:DropDownList ID="DropDownList2" runat="server"  AutoPostBack="True"
                  DataSourceID="SqlDataSource2" DataTextField="BName" DataValueField="BId"  
                  OnDataBound="DownList2_DataBound" 
                  OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged">
</asp:DropDownList>

这是我试图禁用dropdownlist2(javascript):

<script type="text/javascript">
    window.onload = function () {
        document.getElementById('DropDownList2').disabled = true;
    }
</script>

在C#代码中尝试了另一件事:

protected void Page_Load(object sender, EventArgs e)
{
    if (DropDownList1.SelectedValue.ToString() == "1")
    { 
        DropDownList2.Enabled = false;
    }
}

我甚至在page_load中单独尝试过这个:

DropDownList2.Enabled = false;

问题是它在selectIndexChanged上为dropdownlist1禁用,但在页面加载时没有!我的代码中缺少什么东西吗?

5 个答案:

答案 0 :(得分:2)

页面加载上的DropDownList1.SelectedValue可能不等于“1”,因为我猜你会以某种方式对其进行数据绑定,这会在之后生效。

尝试为DropDownList1添加SelectedIndexChanged函数,并在此处显示/启用DropDownList2。您可以将Enabled="False"放入DropDownList2的标记中,以确保它从禁用状态开始。

答案 1 :(得分:1)

问题可能是document.getElementById('DropDownList2')找不到您的下拉列表。列表的ID是服务器端值,不一定转换为客户端ID。如果您将控件的ClientIDMode设置为Static,则客户端ID将为DropDownList2。另一种选择是在输出JavaScript时访问控件的ClientID属性(如果它是内联的):

document.getElementById('<%=DropDownList2.ClientID%>').disabled = true;

所有这一切,即使是这样,最好以Enabled="False"开头,因为@aaroncatlin建议所以你不必等待JavaScript在禁用之前执行。

答案 2 :(得分:1)

此语句允许您将dropdown2设置为在页面加载时禁用。

$('#' + '<%=DropDownList2.ClientID%>').attr('disabled',true);

您可以使用Jquery执行此操作,如下所示:

 $(document).ready(function () {

      var isPostBack = '<%=IsPostBack%>';
        if (isPostBack == 'False' || $('#' + '<%=DropDownList1.ClientID%>').val() == '1') {
          //This statement allow you to set the dropdown2 to disable 
          $('#' + '<%=DropDownList2.ClientID%>').attr('disabled', true);
      }
      else {
          $('#' + '<%=DropDownList2.ClientID%>').attr('disabled', false);
      }
      $('#' + '<%=DropDownList1.ClientID%>').on("change", function () {
          //Your code here
          if ($('#' + '<%=DropDownList1.ClientID%>').val() == '1') {
                $('#' + '<%=DropDownList2.ClientID%>').attr('disabled', true);
           }
           else {
               $('#' + '<%=DropDownList2.ClientID%>').attr('disabled', false);
           }
        });
  });

答案 3 :(得分:1)

在ASP.NET中,生成的ID与组件上的asp ID不同,要从您需要使用的Javascript访问元素&lt;%= DropDownList2.ClientID%&gt;相应的javascript将是这样的:

document.getElementById(<%=DropDownList2.ClientID%>).disabled = true;

答案 4 :(得分:0)

DropDownList的默认选择索引为-1,选定值为空值。我通常会检查选定的索引,而不是按值。例如,

if(DropDownList1.SelectedIndex < 1){
    // assuming that index 0 holds your value of "1"
    DropDownList2.Enabled = false;
}

并且@Jacob正确指出您需要为JavaScript函数获取正确的ClientID。