Как создать текстовое поле только для чтения ASP.NET бритва MVC3
Как создать текстовое поле только для чтения в ASP.NET MVC3, с двигателем взгляда бритвы ? Есть ли метод HTMLHelper, доступный для этого ?
что-то вроде этого ?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
7 ответов:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
вы можете сделать HTML-помощник для этого, но это просто атрибут HTML, как и любой другой. Вы бы сделали HTML-помощник для текстового поля, которое имеет другие атрибуты?
обновление: Теперь очень просто добавить атрибуты html в шаблоны редактора по умолчанию. Значит, вместо этого:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
вы просто можете сделать это:
@Html.EditorFor(m => m.userCode, new { htmlAttributes = new { @readonly="readonly" } })
преимущества: вы не должны звонить
.TextBoxFor
etc. для шаблонов. Просто позвоните.EditorFor
.
в то время как решение @Shark работает правильно, и это просто и полезно, мое решение (которое я использую всегда) - это один создать
editor-template
это может обрабатыватьreadonly
атрибут:
- создать папку с именем
EditorTemplates
на~/Views/Shared/
- создать бритву
PartialView
имениString.cshtml
заполнить
String.cshtml
этот код:@if(ViewData.ModelMetadata.IsReadOnly) { @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line readonly", @readonly = "readonly", disabled = "disabled" }) } else { @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line" }) }
в классе модели поставьте на свойства, которые вы хотите быть
readonly
.например
public class Model { // [your-annotations-here] public string EditablePropertyExample { get; set; } // [your-annotations-here] [ReadOnly(true)] public string ReadOnlyPropertyExample { get; set; } }
теперь вы можете использовать синтаксис razor по умолчанию просто:
@Html.EditorFor(m => m.EditablePropertyExample) @Html.EditorFor(m => m.ReadOnlyPropertyExample)
первый, делает нормальный
text-box
такой:<input class="text-box single-line" id="field-id" name="field-name" />
и второе, окажет;
<input readonly="readonly" disabled="disabled" class="text-box single-line readonly" id="field-id" name="field-name" />
вы можете использовать это решение для любого типа данных (
DateTime
,DateTimeOffset
,DataType.Text
,DataType.MultilineText
и так далее). Просто создайтеeditor-template
.
решение с TextBoxFor в порядке, но если вы не хочу видеть поле, как EditBox стильный (это может быть немного запутано для пользователя) включают в себя следующие изменения:
1. Код бритвы перед изменениями
<div class="editor-field"> @Html.EditorFor(model => model.Text) @Html.ValidationMessageFor(model => model.Text) </div>
2. После изменений
<!-- new div display-field (after div editor-label) --> <div class="display-field"> @Html.DisplayFor(model => model.Text) </div> <div class="editor-field"> <!-- change to HiddenFor in existing div editor-field --> @Html.HiddenFor(model => model.Text) @Html.ValidationMessageFor(model => model.Text) </div>
обычно это решение отключает файл против редактирования, но показывает его значение. Нет необходимости в код изменений.
с кредитами на предыдущий ответ от @Bronek и @Shimmy
Это я сделал samething в ASP.NET ядро
<input asp-for="DisabledField" disabled="disabled" /> <input asp-for="DisabledField" class="hidden" />
первый вход-только для чтения, а второй передает значение в контроллере и скрытая.Надеюсь, что это будет полезно для тех, кто работает с ASP.Net ядро.
@Html.TextBox("Recivers", Model, new { @class = "form-control", style = "width: 300px", @readonly = "readonly" })
@Html.TextBoxFor(model => model.IsActive, new { readonly= "readonly" })
это просто отлично подходит для текстового поля. Однако, если вы попытаетесь сделать то же самое для
checkbox
затем попробуйте использовать это, если вы используете его@Html.CheckBoxFor(model => model.IsActive, new { onclick = "return false" })
но не используйте
disable
потому что отключить всегда отправлять значение по умолчанию false на сервер либо он был в проверенном или непроверенном состоянии. А тоreadonly
не работает checkbox иradio button
.readonly
работает только дляtext
поля.