asp.net MVC: отключить TextBox - PullRequest
       1

asp.net MVC: отключить TextBox

18 голосов
/ 15 сентября 2009

У меня есть Html.TextBox (), и мне нужно отключить его в определенных условиях. С TextArea это выглядит так:

<%=primaryLang ? Html.TextArea("e.location", new { rows = 2, cols = 60 }) : Html.TextArea("e.location", new { rows = 2, cols = 60, disabled = "true" })%>

Но с TextBox это невозможно:

    <%=primaryLang ? 
      Html.TextBox("e.startDate") : 
        Html.TextBox("e.startDate", new { disabled = "true"})%>

Он выдаст {disabled = true} в значении. Это потому, что единственная функция, которая позволит вам передавать атрибуты HtmlAttributes, потребует также передачи модели. Это представление строго типизировано, и модель автоматически заполняется.

Если я передам это так:

Html.TextBox("e.startDate", Model.e.startDate, new { disabled = "true"})

или как это:

Html.TextBox("e.startDate", null, new { disabled = "true"})

версия GET будет работать, но версия POST выдаст исключение NullReferenceException. Оба вышеперечисленных, похоже, имеют одинаковый эффект. Оба предоставят правильные данные из модели на GET.

Если я оставлю это вожделение так:

Html.TextBox("e.startDate") 

это будет работать правильно, как для POST, так и для GET ...

Почему? Есть ли способы достичь?

Спасибо! :)


Благодаря ответам ниже, я решил это так:

<%=primaryLang ? 
        Html.TextBox("e.startDate") : 
          Html.Hidden("e.startDate") + Html.TextBox("e.startDate", null, new { disabled = "true"})%>

Ответы [ 2 ]

17 голосов
/ 15 сентября 2009

Отключенные элементы HTML не отправляются обратно на сервер. Вот почему вы получаете исключение NullReferenceException, когда вам удается отключить ваш элемент.

Я не уверен, чего вы пытаетесь достичь, но если вы не разрешаете редактировать e.startDate, вам не нужно отправлять его обратно, так как вы уже знаете значение. Таким образом, у вас есть два варианта.

  1. Отобразите e.startDate как вы, но просто установите значение e.startDate в вашем методе post на значение по умолчанию или полностью его игнорируйте.
  2. Если вам нужно, чтобы значение было отправлено обратно, отобразите e.startDate в качестве метки, а затем добавьте скрытое поле, содержащее e.startDate, для вашего опубликованного значения.

Предупреждение : Тот факт, что элемент отключен, не означает, что кто-то не может отредактировать значение и отправить его обратно. Это просто рекомендация. Это зависит от браузера, как отображать поле. Если ваш POST-код принимает значение e.startDate, тогда любой, у кого есть доступ, может редактировать это поле с помощью инструментов разработки.

12 голосов
/ 15 сентября 2009

В POST свойство "Model" или "e", вероятно, имеет значение null.

Вы можете попробовать это:

<%if (Model != null && Model.e != null) { %>
<%=Html.TextBox("e.StartDate", Model.e.StartDate, primaryLang ? null :  new { disabled = "disabled" })%>
<%}%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...