如何禁用ASP.NET中的下拉列表?

时间:2009-07-02 17:45:39

标签: c# asp.net webforms

如何在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>

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

5 个答案:

答案 0 :(得分:26)

asp.net webforms的真正下拉列表没有readonly属性。

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

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

ETA:从下拉列表中删除readonly属性,它无效。在您测试该部件并确定它是否已修复之后,如果它仍然没有按照您的要求进行操作,请告诉我们它没有做什么。它不是禁用吗?它不是数据绑定吗?发生了什么事?

哦,如果以任何方式(例如查询更新)传回值,请确保使用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>

答案 1 :(得分:14)

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

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

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

答案 2 :(得分:6)

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

方法1:

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

方法2:

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

方法3(aspx):

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

方法3(aspx.cs):

dd.Enabled = false;

方法4(aspx):

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

方法4(aspx.cs):

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

结果HTML:

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

答案 3 :(得分:0)

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;
}

答案 4 :(得分:0)

这就是我的所作所为:

ddlEditTotalHoursEffect.Enabled = FALSE;

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

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