ASP.NET MVC - отключить элемент управления Html Helper, используя логическое значение из модели - PullRequest
13 голосов
/ 20 августа 2009

Я вывожу текстовое поле на страницу с помощью Html-помощников.Я хочу добавить атрибут disabled динамически в зависимости от того, является ли логическое значение в моей модели истинным или ложным.

В моей модели есть метод, который возвращает логическое значение:

<% =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 />

Какой самый чистый способ сделать это?

Ответы [ 5 ]

15 голосов
/ 20 августа 2009

Это должно сработать:

<%= Html.TextBox("MyTextbox", Model.MyValuenew,           
      (Model.IsMyTextboxEnabled() ? (object) new {id = "MyTextbox", @class = "MyClass"}
                                  : (object) new {id = "MyTextbox", @class = "MyClass", disabled="true" })) %>
3 голосов
/ 03 января 2011

Возможно, слишком поздно, но надеюсь, что это поможет:

Я недавно работал с ASP MVC и (поскольку я отказался иметь одну комбинацию анонимных типов для каждого возможного набора атрибутов) понял, что, начиная с MVC 2, каждый метод Input Extension имеет две формы: одну с атрибутами как объекты и один как 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)%>
  ...
3 голосов
/ 20 августа 2009

У вашего помощника была бы проверка в коде, когда вы генерируете 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", "") %>
<%}
0 голосов
/ 19 января 2013

С помощью этого метода вы можете указать несколько атрибутов, если необходимо

@Html.TextBox("mytextbox", new {}, new { @class = "myclass", disabled = "true" })
0 голосов
/ 30 апреля 2010

См. Мой ответ здесь: Текстовое поле отключено

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