【问题标题】:How can I disable a dropdownlist in ASP.NET?如何在 ASP.NET 中禁用下拉列表?
【发布时间】:2010-11-07 17:25:53
【问题描述】:

如何在 ASP.NET 中禁用 DropDownList

代码:

<asp:TemplateField HeaderText="Effective Total Hours"> 
<ItemTemplate> 
    <%# Eval("TotalHoursEffect")%> 
</ItemTemplate> 
<EditItemTemplate> 
    <asp:DropDownList ID="ddlEditTotalHoursEffect" AppendDataBoundItems="true" 
     DataSourceID="dsTHMsql" DataValueField="Minutes" Enabled="false" 
     ReadOnly="true" DataTextField="Display" 
     SelectedValue='<%# Eval("TotalHoursEffect") %>' runat="server"> 
        <asp:ListItem Selected="True" Value="">(Choose Minutes)</asp:ListItem>
    </asp:DropDownList> 
</EditItemTemplate> 
</asp:TemplateField>

这对我不起作用。我做错了什么?

【问题讨论】:

  • 请对我好一点。代码无法正常工作。如果它有效,我不会发布这个问题。而且不会有任何人的时间。
  • 只需添加不起作用的代码及其周围的代码,人们会帮助您尝试修复它。
  • @Yonita - 你说代码不能正常工作,但你没有给出任何上下文。你想要什么行为?禁用可能意味着很多事情——它应该是可见但不可修改的吗?它应该根本不可见吗?这是用于网页还是winforms?您提供的详细信息越多,您获得有用答案的可能性就越大。
  • 乔恩,谢谢。你是对的,我在后面的代码中启用它..

标签: c# asp.net webforms


【解决方案1】:
var rmu_minutes = 0;

var initRmuChangeHandlers = function() {

    $(".container select").change(function(e) {
        var x = 0;
        var dropDowns = $(".container select");
        dropDowns.each(function() {
            var ddl = this;
            x += parseInt(ddl.value);
            if (!dayOffRmuValidator(x)) {
                alert("4 Hours MAX");
                ddl.selectedIndex = 0;
            }
        });
        rmu_minutes = x;
        updateTotalRmu();

    });
}

var initClearRmuDropDowns = function() {

    var dropDowns = $(".container select");
    dropDowns.each(function() {
        var ddl = this;
        ddl.selectedIndex = 0;
    });
}

var dayOffRmuValidator = function(rmu_minutes) {
    var _MAXMINUTES = 240;

    var ddl = $get('ctl00_ContentPlaceHolder1_DetailsView1_ddlEditType');
    var ddlVal = parseInt(ddl.options[ddl.selectedIndex].value);

    if (ddlVal == RequestTypes["Day Off"])
        return rmu_minutes <= _MAXMINUTES;

    return true;
}


var badRmuHours = function() {
    alert("You are only allowed to make up 4 hours total for a day off");
    var ddlTotal = $("#ctl00_ContentPlaceHolder1_DetailsView1_ddlEditTotalHoursEffect")[0];
    ddlTotal.selectedIndex = 0;
}

【讨论】:

    【解决方案2】:

    假设禁用的意思是“使用户无法从列表中选择一个项目”,那么以下示例都会产生相同的 html(对我有用):

    方法一:

    <asp:DropDownList ID="dd" Enabled="false" runat="server">...
    

    方法二:

    <asp:DropDownList ID="dd" disabled="disabled" runat="server">...
    

    方法3(aspx):

    <asp:DropDownList ID="dd" runat="server">...
    

    方法3(aspx.cs):

    dd.Enabled = false;
    

    方法四(aspx):

    <asp:DropDownList ID="dd" runat="server">...
    

    方法4(aspx.cs):

    dd.Attributes.Add("disabled", "disabled")
    

    生成的 HTML:

    <select name="dd" id="dd" disabled="disabled">...
    

    【讨论】:

      【解决方案3】:

      您可以禁用下拉列表,但您需要从后面的代码中执行此操作。

      在你的 .cs 中试试这个(假设你的 asp:DropDownList 作为 ddlCategory 的 id),

      ddlCategory.Attributes.Add("disabled", "disabled");
      

      【讨论】:

        【解决方案4】:

        这就是我的工作:

        ddlEditTotalHoursEffect.Enabled=false;

        我可以通过你的代码隐藏来完成。

        哦,等等,你已经启用等于 false。那你想要做什么呢?是否要启用数据输入框但不启用下拉?

        【讨论】:

          【解决方案5】:

          对于 asp.net 网络表单的真正下拉列表没有只读属性。

                  <asp:DropDownList ID="DropDownList1" runat="server" Enabled="False">
              </asp:DropDownList>
          

          如果这不是您正在做的事情,您将需要更加具体。你没有问任何问题,你没有解释什么不起作用,或者说你使用的是 webforms 还是 winforms,或者它是否在后面的代码或 aspx 页面中。

          ETA:从下拉列表中删除只读属性,它无效。在您测试该部件并查看它是否修复它之后,如果它仍然没有做您想要的,请告诉我们它没有做什么。不是禁用吗?不是数据绑定吗?这是怎么回事?

          哦,如果值以任何方式(例如查询更新)传回,请确保使用 Bind 而不是 Eval 来编辑模板。有时候平台是在幕后做的,所以一般来说就用Bind就好了。

          还有一个编辑:从最基本的意义上说,这对我有用,因为它绑定并且下拉菜单不可选择。

                  <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID"
                  DataSourceID="sqldsProducts" AutoGenerateEditButton="True">
                  <Columns>
                      <asp:BoundField DataField="ProductID" HeaderText="ProductID" SortExpression="ProductID" />
                      <asp:TemplateField HeaderText="CategoryID" InsertVisible="False" SortExpression="CategoryID">
                          <EditItemTemplate>
                              <asp:DropDownList Enabled="false" ID="ddlCategory" runat="server" DataSourceID="sqldsCategories"
                                  DataTextField="CategoryName" DataValueField="CategoryID" SelectedValue='<%# Bind("CategoryID") %>' AppendDataBoundItems="True">
                                  <asp:ListItem Selected="True" Value="" Text="-- choose one --" />
                              </asp:DropDownList>
                          </EditItemTemplate>
                          <ItemTemplate>
                              <asp:Label ID="lblCategory" runat="server" Text='<%# Bind("ProductID") %>'></asp:Label>
                          </ItemTemplate>
                      </asp:TemplateField>
                      <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" />
                  </Columns>
              </asp:GridView>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-03-21
            • 2013-12-17
            • 2021-01-09
            • 2014-06-29
            • 2014-04-02
            • 2013-06-08
            相关资源
            最近更新 更多