【问题标题】:make drop down list item unselectable使下拉列表项不可选择
【发布时间】:2009-09-04 13:06:01
【问题描述】:

我有一个下拉列表,其中包含用于生成报告的多个选项。根据帐户类型,用户有某些选项应该可见但不可选择(作为他们升级的动力)。

我想知道是否有人知道实现此目的的方法。

权限已经到位,我只需要帮助使某些项目无法选择。

任何帮助将不胜感激。

【问题讨论】:

    标签: asp.net drop-down-menu


    【解决方案1】:

    您可以在 html <select> 中禁用 <option> 标记

    见:http://www.htmlref.com/reference/appa/tag_option.htm

    在 asp.net 中:

    <asp:DropDownList ID="MyDropDownList" runat="server">
            <asp:ListItem Text="Standard Report" Value="SR"></asp:ListItem>
            <asp:ListItem Text="Enterprise Report" Value="ER" disabled="disabled"></asp:ListItem>
        </asp:DropDownList>
    

    【讨论】:

    • 如何在 ASP.NET 中实现?
    【解决方案2】:

    不确定您是否仍在为此寻找答案?

    Mark Redman's answer 如果你可以在 aspx 页面中定义选择列表,那就太好了,但是如果你动态绑定下拉列表,显然你不能。

    我成功地使用以下方法实现了您所追求的结果(不确定是否支持完整的浏览器,但适用于较新版本的 IE)

    foreach ( ListItem item in dropdownlist.Items )
    {
        if ( [item should be disabled condition] )
        {
            item.Attributes.Add( "disabled", "disabled" );
        }
    }
    

    这将使您的禁用元素变灰。

    【讨论】:

    • 我在Page_Load 事件中添加您建议的代码,但我想要禁用的ListItem 项目(选择)仍未灰显。知道为什么吗?
    • 它会禁用该项目吗?如果是这样,可能是样式也需要调整?
    • 您需要在下拉列表控件的数据绑定事件处理程序中添加代码。
    【解决方案3】:

    您可以使用必填字段验证器并将初始值属性设置为下拉列表中您不想选择的项目的值。

    <asp:RequiredFieldValidator ID="RequiredFieldValidator" runat="server"
                            ErrorMessage="" ControlToValidate="DropDown" InitialValue="Unselectable Item"></asp:RequiredFieldValidator>
    

    【讨论】:

      【解决方案4】:

      Adam Fox 的这个 sn-p 绝对正确:

      foreach ( ListItem item in dropdownlist.Items )
      {
          if ( [item should be disabled condition] )
          {
              item.Attributes.Add( "disabled", "disabled" );
          }
      }
      

      唯一需要注意的是,它需要在 OnDataBound 事件中调用,而不是 OnDataBinding 事件(这在生命周期中太早了)。

      【讨论】:

        【解决方案5】:

        你可以试试这个

        myDropDownList.Items.FindByValue("ReportValue").Attributes.Add("disabled", "disabled");
        

        【讨论】:

          【解决方案6】:

          如果这是 HTML 控件,那么很容易使其不可选择。只需使用 "optgroup" HTML 元素。例如

          <select>
          <optgroup label="Hardware"></optgroup>
          <option id="1">mouse</option>
          <option id="2">keyboard</option>
          <option id="3">monitor</option>
          <optgroup label="Software"></optgroup>
          <option id="Option1">windows XP</option>
          <option id="Option2">MS Office</option>
          <option id="Option3">VStudio</option>
          </select>
          

          (注意:这适用于 IE/firefox)

          谢谢 苏希尔金德

          【讨论】:

          • 这不是optgroup 的用途。
          • 除非您透露 optgroup 的用途,否则您的评论没有帮助。
          【解决方案7】:

          我遇到了同样的问题,并尝试使用发布的第一个答案,但它对我不起作用。然后我将第一个帖子更改为:

          foreach ( ListItem item in dropdownlist.Items )
          {
            if ( [item should be disabled contdition] )
            {
               item.Enabled = false;
            }
          }
          

          它对我有用。

          【讨论】:

          • 这种方法会从列表中删除元素,并且不会禁用它。所以它没有回答这篇文章中的最初问题。
          【解决方案8】:

          您可以在客户端使用选择项目时触发的处理程序来执行此操作。然后取消选择该项目和/或显示错误消息。

          【讨论】:

            【解决方案9】:

            试试这个

            myDropDownList.Items.FindByValue("ReportValue").Enabled = false;
            

            这将禁用列表中的项目,基本上不在列表中显示它。

            "ReportValue" = 要禁用的项目的值。

            【讨论】:

            • 他希望禁用的元素可见,只是不可选择,所以不确定这是否可行。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-19
            • 2017-05-19
            • 1970-01-01
            • 2011-11-03
            相关资源
            最近更新 更多