답변:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
이를 위해 HTML Helper를 만들 수 있지만 이것은 단순히 다른 것과 마찬가지로 HTML 속성 일뿐입니다. 다른 속성을 가진 텍스트 상자에 대한 HTML 도우미를 만드시겠습니까?
@
. 당신은 보통 일치 HTML은 (등 읽기 전용, 클래스, 같은) 속성 것을 키워드를 볼 수 있습니다
@
와 일치하는 속성 만 사용 하면됩니다 .
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly", @class="form-control" })
업데이트 : 이제 기본 편집기 템플릿에 HTML 속성을 추가하는 것은 매우 간단합니다. 다음을 수행하는 대신 필요합니다.
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
간단히 이렇게 할 수 있습니다.
@Html.EditorFor(m => m.userCode, new { htmlAttributes = new { @readonly="readonly" } })
이점 : .TextBoxFor
템플릿을 위해 등 을 호출 할 필요가 없습니다 . 전화 만하세요 .EditorFor
.
@Shark의 솔루션이 올바르게 작동하고 간단하고 유용하지만 내 솔루션 (항상 사용하는)은 다음과 같습니다. Create an editor-template
that can handle the readonly
attribute :
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(true)]
원하는 속성에 속성을 입력하십시오 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 stylish (사용자에게 약간 혼란 스러울 수 있음) 과 같은 필드를 보지 않으려면 다음과 같이 변경해야합니다.
변경 전 Razor 코드
<div class="editor-field">
@Html.EditorFor(model => model.Text)
@Html.ValidationMessageFor(model => model.Text)
</div>
변경 후
<!-- 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의 이전 답변에 대한 크레딧 :
이것은 ASP.NET Core에서 동일한 작업을 수행 한 것과 같습니다.
<input asp-for="DisabledField" disabled="disabled" />
<input asp-for="DisabledField" class="hidden" />
첫 번째 입력은 읽기 전용이고 두 번째 입력은 컨트롤러에 값을 전달하고 숨겨집니다. ASP.NET Core로 작업하는 사람에게 유용하기를 바랍니다.
@Html.TextBox("Receivers", 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
확인란 및 radio button
. 필드 readonly
에서만 작동 text
합니다.
아래 코드를 사용하여 TextBox를 읽기 전용으로 만들 수 있습니다.
방법 1
@Html.TextBoxFor(model => model.Fields[i].TheField, new { @readonly = true })
방법 2
@Html.TextBoxFor(model => model.Fields[i].TheField, new { htmlAttributes = new {disabled = "disabled"}})
@
접두사 가 누락되었습니다readonly
. 내 편집을 참조하십시오.