Формат html.DropDownList-Отключено / Только Для Чтения
какой параметр мне нужно установить, чтобы сделать выпадающее окно только для чтения при использовании Mvcs Html.Выпадающий список?
Я пробовал такие вещи, как....
Html.DropDownList("Types", Model.Types, new { _Enabled = "false" })
...и много разных вещей по этой линии; увы, не радость!
Я думал, что это будет легко.....и это вероятно!
12 ответов:
относительно улова 22:
если мы используем тег
@disabled
, поле не отправляется в действие (Mamoud) И если мы используем@readonly
, выпадающий ошибка по-прежнему позволяет изменить значениеиспользуйте
@disabled
, и добавить поле, скрытое после выпадающего списка:@Html.HiddenFor(model => model.xxxxxxxx)
тогда он действительно отключен и отправлен в действие тоже.
<script type="text/javascript"> $(function () { $(document) .ajaxStart(function () { $("#dropdownID").attr("disabled", "disabled"); }) .ajaxStop(function () { $("#dropdownID").removeAttr("disabled"); }); }); </script>
мне пришлось отключить выпадающий список и скрыть основной идентификатор
<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>
или вы можете попробовать что-то вроде этого:
Html.DropDownList("Types", Model.Types, new { @readonly = "true" })
подсказка, которая может быть очевидна для некоторых, но не для других..
если вы используете HTML-помощник на основе
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" } )
Я просто делаю это и называю это днем
Model.Id > -1 ? Html.EnumDropDownListFor(m => m.Property, new { disabled = "disabled" }) : Html.EnumDropDownListFor(m => m.Property)
Html.Выпадающий Список ("Типы", Модель.Типы, новые { @disabled = " disabled" }) @формат HTML.Скрытый(Модель.Типы) а для сохранения и восстановления данных используйте скрытый элемент управления
для полноты здесь находится HTML-помощник для DropDownListFor, который добавляет параметр enabled, когда false select отключен. Он сохраняет атрибуты html, определенные в разметке, или он позволяет использовать атрибуты html в разметке, он публикует select value на сервер, а использование очень чистое и простое.
вот код для помощника:
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()); }
и использование, цель состоит в том, чтобы отключить выбор, если есть только один элемент в настройках, разметка:
@Html.DropDownListFor(m => m.SomeValue, Model.SomeList, new { @class = "some-class" }, Model.SomeList > 1)
и есть еще один более элегантный пример HTML Helper, пока нет поддержки post (довольно прямолинейная работа, просто используйте HAP и добавьте скрытый ввод в качестве корневого элемента sibling и swap id):
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)
Я создал этот ответ после ссылки выше всех комментариев и ответов. Это позволит решить выпадающую ошибку населения, даже если она будет отключена.
шаг 01
Html.DropDownList("Types", Model.Types, new {@readonly="readonly"})
шаг 02 Это css pointerevent удалить код.
Тогда вы можете ожидать результатов<style type="text/css"> #Types { pointer-events:none; } </style>
Проверено И Доказано