ASP.NET MVC - отключить управление Html Helper с использованием логического значения из модели
Я выводил текстовое поле на страницу с помощью Html-помощников. Я хочу добавить отключенный атрибут динамически на основе того, является ли логическое значение в моей модели истинным или ложным.
В моей модели есть метод, который возвращает логическое значение:
<% =Model.IsMyTextboxEnabled() %>
В настоящее время я представляю текстовое поле следующим образом, но я хочу включить или отключить его:
<% =Html.TextBox("MyTextbox", Model.MyValuenew { id = "MyTextbox", @class = "MyClass" })%>
Если возвращаемое значение Model.IsMyTextboxEnabled() == true, я хочу, чтобы выводилось следующее:
<input class="MyClass" id="MyTextbox" name="MyTextbox" type="text" value="" />
Если это == false, я хочу, чтобы он выводился как:
<input class="MyClass" id="MyTextbox" name="MyTextbox" type="text" value="" disabled />
Каков самый чистый способ сделать это?
Ответы
Ответ 1
Это должно сделать трюк:
<%= Html.TextBox("MyTextbox", Model.MyValuenew,
(Model.IsMyTextboxEnabled() ? (object) new {id = "MyTextbox", @class = "MyClass"}
: (object) new {id = "MyTextbox", @class = "MyClass", disabled="true" })) %>
Ответ 2
В вашем помощнике у вас будет проверка кода, когда вы генерируете html, который просто проверяет bool, а затем либо добавляет отключенный атрибут, либо оставляет его?
Это простой пример и неструктурированный, но...
if (disabled)
return string.Format(CultureInfo.InvariantCulture, "<input type=text disabled/>", new object[] { HttpUtility.HtmlAttributeEncode(s), myTextBox });
Это то, о чем вы спрашивали?
EDIT:
Подождите, я вижу сейчас. Я думаю, вам нужно либо создать свой собственный помощник, либо расширить помощник текстового поля MVC, чтобы вы могли это сделать.
Либо это, либо вы можете сделать что-то вроде:
<%= Html.TextBox("mytextbox","", new { disabled="true" } %>
Вышеупомянутый непроверен, но что-то вроде этого должно работать.
ИЗМЕНИТЬ 2:
<% if (condition) {%>
<%= Html.TextBox("mytextbox", "", new {@readonly="readonly"}) %>
<%} else {%>
<%= Html.TextBox("mytextbox", "") %>
<%}
Ответ 3
Слишком поздно возможно, но надеюсь, что это поможет:
Недавно я работал с ASP MVC и (поскольку я отказался иметь одну комбинацию анонимных типов для каждого возможного набора атрибутов) понял, что с MVC 2 каждый метод расширения ввода имеет две формы: одну с атрибутами как Объекты и один как IDictionary<string, Object>
. См. API msdn
Итак, я закончил кодирование следующего, что лично мне гораздо удобнее создавать несколько объектов (на самом деле, для нескольких опций или элементов управления флажками вы можете использовать только один словарь и добавлять или удалять свойства по своему усмотрению):
<%
IDictionary<string, Object> radioAttrs = new Dictionary<string, Object>();
radioAttrs.Add("class", "radioBot");
if (Model.EnabledRegistro)
{
radioAttrs["onclick"] = "updateControlsForInfoNom(true)";
}
else
{
radioAttrs["disabled"] = "disabled";
}
%>
<%: Html.RadioButtonFor(model => model.Accion.calculoRegistro, "true", radioAttrs)%>
...
Ответ 4
Смотрите мой ответ здесь: Отключено текстовое поле
Ответ 5
С помощью этого метода вы можете предоставить несколько атрибутов при необходимости
@Html.TextBox("mytextbox", new {}, new { @class = "myclass", disabled = "true" })