Html.DropDownList - отключено / доступно только для чтения - PullRequest
61 голосов
/ 28 октября 2009

Какой параметр мне нужно установить, чтобы раскрывающийся список был доступен только для чтения при использовании MVCs Html.DropDownList?

Я пробовал что-то вроде ....

Html.DropDownList("Types", Model.Types, new { _Enabled = "false" })

... и много разных вещей по этой линии; увы не радость!

Я думал, что это будет легко ..... и это, вероятно, так!

Ответы [ 12 ]

128 голосов
/ 28 октября 2009

Попробуйте это

Html.DropDownList("Types", Model.Types, new { @disabled = "disabled" })
73 голосов
/ 11 января 2015

Относительно улова 22:

Если мы используем @disabled, поле не отправляется в действие (Mamoud) И если мы используем @readonly, раскрывающаяся ошибка все еще позволяет вам изменить значение

Обходной путь: используйте @disabled и добавьте поле, скрытое после раскрывающегося списка:

@Html.HiddenFor(model => model.xxxxxxxx)

Тогда он действительно отключен и тоже отправляется в действие.

5 голосов
/ 28 января 2013
<script type="text/javascript">
$(function () {
        $(document) .ajaxStart(function () {
                $("#dropdownID").attr("disabled", "disabled");
            })
            .ajaxStop(function () {
                $("#dropdownID").removeAttr("disabled");

            });

});
</script>
3 голосов
/ 05 июня 2017

Мне пришлось отключить выпадающий список и скрыть основной идентификатор

<div class="form-group">
        @Html.LabelFor(model => model.OBJ_ID, "Objs", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("OBJ_ID", null, htmlAttributes: new { @class = "form-control", @disabled = "disabled"})
            @Html.HiddenFor(m => m.OBJ_ID)
            @Html.ValidationMessageFor(model => model.OBJ_ID, "", new { @class = "text-danger" })
        </div>
    </div>
3 голосов
/ 23 ноября 2012

Или вы можете попробовать что-то вроде этого:

Html.DropDownList("Types", Model.Types, new { @readonly = "true" })
2 голосов
/ 05 марта 2018

Совет, который может быть очевиден для некоторых, но не для других ..

Если вы используете HTML Helper, основанный на DropDownListFor, тогда ваш идентификатор будет продублирован во вводе HiddenFor. Поэтому у вас будут дубликаты идентификаторов, которые недопустимы в HTML, и если вы используете javascript для заполнения HiddenFor и DropDownList, у вас возникнет проблема.

Решение состоит в том, чтобы вручную установить свойство ID в массиве htmlattributes ...

@Html.HiddenFor(model => model.Entity)

@Html.EnumDropDownListFor(
  model => model.Entity, 
  new { 
         @class = "form-control sharp", 
         onchange = "", 
         id =` "EntityDD", 
         disabled = "disabled" 
       }
)
2 голосов
/ 15 июня 2017

Поместите это в стиле

 select[readonly] option, select[readonly] optgroup {
        display: none;
    }
1 голос
/ 10 октября 2016

Я просто делаю это и называю это днем ​​

Model.Id > -1 ? Html.EnumDropDownListFor(m => m.Property, new { disabled = "disabled" }) : Html.EnumDropDownListFor(m => m.Property)
0 голосов
/ 22 марта 2018

Для полноты здесь приведен HTML-помощник для DropDownListFor, который добавляет включенный параметр, когда ложный выбор отключен. Он сохраняет html-атрибуты, определенные в разметке, или позволяет использовать html-атрибуты в разметке, отправляет значение select на сервер, и его использование очень чисто и просто.

Вот код для помощника:

public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, object htmlAttributes, bool enabled)
{
  if (enabled)
  {
    return SelectExtensions.DropDownListFor<TModel, TProperty>(html, expression, selectList, htmlAttributes);
  }

  var htmlAttributesAsDict = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
  htmlAttributesAsDict.Add("disabled", "disabled");
  string selectClientId = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression));
  htmlAttributesAsDict.Add("id", selectClientId + "_disabled");

  var hiddenFieldMarkup = html.HiddenFor<TModel, TProperty>(expression);
  var selectMarkup = SelectExtensions.DropDownListFor<TModel, TProperty>(html, expression, selectList, htmlAttributesAsDict);
  return MvcHtmlString.Create(selectMarkup.ToString() + Environment.NewLine + hiddenFieldMarkup.ToString());
}

и использование, цель - отключить select, если в настройках есть только один элемент, разметка:

@Html.DropDownListFor(m => m.SomeValue, Model.SomeList, new { @class = "some-class" }, Model.SomeList > 1)

И еще один изящный пример HTML Helper, пока не поддерживающий публикацию (довольно прямолинейная работа, просто используйте HAP и добавьте скрытый ввод в качестве братского элемента и идентификатора обмена):

public static MvcHtmlString Disable(this MvcHtmlString previous, bool disabled, bool disableChildren = false)
{
  if (disabled)
  {
    var canBeDisabled = new HashSet<string> { "button", "command", "fieldset", "input", "keygen", "optgroup", "option", "select", "textarea" };
    var doc = new HtmlDocument();
    doc.LoadHtml(previous.ToString());
    var rootElements = doc.DocumentNode.Descendants().Where(
      hn => hn.NodeType == HtmlNodeType.Element && 
      canBeDisabled.Contains(hn.Name.ToLower()) && 
      (disableChildren || hn.ParentNode.NodeType == HtmlNodeType.Document));

    foreach (var element in rootElements)
    {
      element.SetAttributeValue("disabled", "");
    }
    string html = doc.DocumentNode.OuterHtml;
    return MvcHtmlString.Create(html);
  }
  return previous;
}

Например, есть свойство модели bool AllInputsDisabled, при true все html-входы должны быть отключены:

@Html.TextBoxFor(m => m.Address, new { placeholder = "Enter address" }).Disable(Model.AllInputsDisabled)

@Html.DropDownListFor(m => m.DoYou, Model.YesNoList).Disable(Model.AllInputsDisabled)
0 голосов
/ 15 августа 2017

Html.DropDownList ("Types", Model.Types, new {@disabled = "disabled"}) @ Html.Hidden (Model.Types) а для сохранения и восстановления данных используйте скрытый элемент управления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...