Могу ли я установить текстовое поле только для чтения при использовании Html.TextBoxFor?


У меня есть следующий тег с Html.TextBoxFor выражение и я хочу, чтобы содержимое было только для чтения, это возможно?

<%= Html.TextBoxFor(m => Model.Events.Subscribed[i].Action)%>
14 53

14 ответов:

обновлено для современных версий .NET за предложение @1c1cle в комментарии:

<%= Html.TextBoxFor(model => Model.SomeFieldName, new {{"readonly", "true"}}) %>

поймите, что это не "безопасный" способ сделать это, поскольку кто-то может ввести javascript, чтобы изменить это.

что-то нужно знать, что если вы установите это readonly значение false, вы на самом деле не вижу никаких изменений в поведении! Поэтому, если вам нужно управлять этим на основе переменной, вы не можете просто подключить эту переменную. Вместо этого вам нужно использовать условную логику, чтобы просто не пройти что readonly атрибут.

вот непроверенное предложение о том, как это сделать (если есть проблема с этим, вы всегда можете сделать if / else):

<%= Html.TextBoxFor(model => Model.SomeFieldName, shouldBeReadOnlyBoolean ? new {{"readonly", "true"}} : null) %>
<%= Html.TextBoxFor(m => Model.Events.Subscribed[i].Action, new { @readonly = true })%>

использовать следующий:

 @Html.TextBoxFor(m => m.Whatever, new {@readonly = "readonly"})

Если вы хотите назначить ему класс, вы можете сделать это таким же образом, добавив @класс= "" свойство. Надеюсь, это поможет :)

чтобы сделать его только для чтения

@Html.TextBoxFor(m=> m.Total, new {@class ="form-control", @readonly="true"})

к diable

@Html.TextBoxFor(m=> m.Total, new {@class ="form-control", @disabled="true"})
<%= Html.TextBoxFor(m => Model.Events.Subscribed[i].Action, new {readonly=true})%>

следующий фрагмент работал для меня.

@Html.TextBoxFor(m => m.Crown, new { id = "", @style = "padding-left:5px", @readonly = "true" }) 
<%: Html.TextBoxFor(m => Model.Events.Subscribed[i].Action, new { @autocomplete = "off", @readonly=true})%>

вот как вы устанавливаете несколько свойств

эта работа для меня...

@Html.TextBoxFor(model => model.RIF, new { value = @Model.RIF, @readonly = "readonly" })

используя пример @Hunter, в новом { .. } часть, добавить readonly = true, я думаю, что это будет работать.

другой вариант :

<%= Html.TextBoxFor(model => Model.SomeFieldName, new Dictionary<string, object>(){{"disabled", "true"}}) %>

на самом деле ответ мозговых сетей почти правильный:

@Html.TextBoxFor(model => model.RIF, new { value = @Model.RIF, @readonly = true })

в случае, если вам нужно применить свой пользовательский класс, вы можете использовать

  @Html.TextBoxFor(m => m.Birthday,   new Dictionary<string, object>() { {"readonly", "true"}, {"class", "commonField"} } )

где

commonField это класс CSS

и день рождения может быть строковое поле, которое вы, вероятно, можете использовать, чтобы сохранить jQuery Datapicker дата :)

<script>
             $(function () {
                 $("#Birthday").datepicker({

                 });
             });
  </script>

вот реальный пример из жизни.

установив атрибут readonly либо true, либо false не будет работать в большинстве браузеров, я сделал это, как показано ниже, когда режим страницы "перезагрузка", я не включил атрибут "readonly".

@if(Model.Mode.Equals("edit")){
@Html.TextAreaFor(model => Model.Content.Data, new { id = "modEditor", @readonly = moduleEditModel.Content.ReadOnly, @style = "width:99%; height:360px;" })
}
@if (Model.Mode.Equals("reload")){
@Html.TextAreaFor(model => Model.Content.Data, new { id = "modEditor", @style = "width:99%; height:360px;" })}
   @Html.TextBoxFor(model => model.IdUsuario, new { @Value = "" + User.Identity.GetUserId() + "", @disabled = "true" })

@disabled = "true"

очень хорошо