現在、エディターフィールドを生成するためにHtml.EditorFor <>メソッドを使用していますが、詳細ページなどの読み取り専用形式でフィールド情報を表示するために同様のものを使用したいと思います。フィールド値のラベル。
これを生成するためのMVCの同等物は現在ありますか?それとも、カスタムヘルパーを作成する必要がありますか?
前もって感謝します。
編集:私はDisplayForとLabelForを認識していますが、手動でこれらを組み合わせる必要があるだけですか?
何か不足している可能性がありますが、Html.LabelFor
を使用できませんか?
編集:Html.LabelFor
とHtml.DisplayFor
を組み合わせて使用する必要がある場合があります
使用する
<%= Html.DisplayFor(model => model.Property) %>
または、読み取り専用(無効)のテキストボックスを表示したい場合
<%= Html.TextBoxFor(model => model.Property, new { disabled="disabled", @readonly = "readonly" })%>
使用できます
Html.DisplayFor(...)
ドキュメンテーション:
http://msdn.Microsoft.com/en-us/library/system.web.mvc.html.displayextensions.displayfor.aspx
MVC 5、Bootstrap 3の例。
<div class="col-md-6">
@Html.LabelFor(m => m.UserModel.company, htmlAttributes: new {@class = "control-label tc-label"})
@Html.EditorFor(m => m.UserModel.company, new {htmlAttributes = new { disabled = "disabled", @readonly = "readonly", @class = "form-control col-md-6"}})
@Html.ValidationMessageFor(m => m.UserModel.company, "", new {@class = "text-danger"})
</div>
モデルのプロパティにバインドされているテキストボックスコントロールがあります。しかし、ユーザーに直接編集させるのではなく、値の入力に使用しているJQueryUIスライダーがあります。したがって、私はこの値を読み取り専用にしたいが、それでもモデルにバインドしたい。 Html.EditorFor(...)を使用してhtml属性を適用できません。Html.TextboxFor(...)メソッドを使用できます。ただし、HTMLの「無効」属性を「無効」の値に設定すると(zihotkiのソリューションに従って)、MVCフレームワークはデフォルトで、テキストボックスの値をモデルのバインドされたプロパティにバインドしません。コントローラーメソッドに( 無効にされたTextbox でモデルバインディングを参照)。私の解決策はHtml.TextboxForを使用し、読み取り専用属性をonlyに設定することでした。
@Html.TextBoxFor(model => model.MyProperty, new { @readonly = "readonly" })
次に、input:readonlyのCSSエントリを含めて、読み取り専用ボックスをグレー表示にします。
input:read-only
{
background-color: #E6E6E6;
}
フォームフィールドではなく文字列を返すEditorForテンプレートを作成します。次にUIHintを使用します
例えば。これはStringReadOnly EditorForテンプレートです
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %><%:ViewData.TemplateInfo.FormattedModelValue.ToString()%>
モデル内
[UIHint("StringReadOnly")]public string NoChangeMe {get;set}
次に、EditorForでフィールドを呼び出すだけで、文字列が出力されます。
もちろん、フィールドは提出されませんが、それが私が起こりたかったことです。