Как создать текстовое поле readonly в 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
потому что disable всегда отправляет значение по умолчанию false на сервер либо в проверенном, либо в непроверенном состоянии. И readonly
не работает checkbox и radio button
. readonly
работает только для text
поля.
Вы можете использовать ниже код для создания текстового поля только для чтения.
способ -1
@Html.TextBoxFor(model => model.Fields[i].TheField, new { @readonly = true })
способ -2
@Html.TextBoxFor(model => model.Fields[i].TheField, new { htmlAttributes = new {disabled = "disabled"}})