回答:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
このためのHTMLヘルパーを作成することはできますが、これは他のHTMLの属性と同じです。他の属性を持つテキストボックス用のHTMLヘルパーを作成しますか?
@
。通常は、HTML属性(readonly、classなど)に一致するキーワードでのみ表示されます
@
一致する属性を使用する必要があるだけです。
@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のソリューションは正しく機能し、シンプルで便利ですが、私のソリューション(私が常に使用している)はこれです:属性を処理できるを作成します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(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" />
そして2番目はレンダリングされます。
<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のようなフィールドを表示したくない場合(ユーザーを混乱させる可能性があります)、次のように変更します。
変更前のかみそりコード
<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>
通常、このソリューションはフィールドの編集を防ぎますが、その値を示します。分離コードの変更は必要ありません。
@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
プロパティのプレフィックスがありませんでした。私の編集を参照してください。