web-dev-qa-db-ja.com

読み取り専用データを表示するためのHtml.EditorFor <>同等物?

現在、エディターフィールドを生成するためにHtml.EditorFor <>メソッドを使用していますが、詳細ページなどの読み取り専用形式でフィールド情報を表示するために同様のものを使用したいと思います。フィールド値のラベル。

これを生成するためのMVCの同等物は現在ありますか?それとも、カスタムヘルパーを作成する必要がありますか?

前もって感謝します。

編集:私はDisplayForとLabelForを認識していますが、手動でこれらを組み合わせる必要があるだけですか?

17
StrictlySocial

何か不足している可能性がありますが、Html.LabelForを使用できませんか?

編集:Html.LabelForHtml.DisplayForを組み合わせて使用​​する必要がある場合があります

4
Manatherin

使用する

<%= Html.DisplayFor(model => model.Property) %>

または、読み取り専用(無効)のテキストボックスを表示したい場合

<%= Html.TextBoxFor(model => model.Property, new { disabled="disabled", @readonly = "readonly" })%>
36
zihotki

使用できます

Html.DisplayFor(...)

ドキュメンテーション:

http://msdn.Microsoft.com/en-us/library/system.web.mvc.html.displayextensions.displayfor.aspx

4
James Gaunt

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>
3
GGleGrand

モデルのプロパティにバインドされているテキストボックスコントロールがあります。しかし、ユーザーに直接編集させるのではなく、値の入力に使用している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;
}
3
Andy Thomas

フォームフィールドではなく文字列を返すEditorForテンプレートを作成します。次にUIHintを使用します

例えば。これはStringReadOnly EditorForテンプレートです

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %><%:ViewData.TemplateInfo.FormattedModelValue.ToString()%>

モデル内

[UIHint("StringReadOnly")]public string NoChangeMe {get;set}

次に、EditorForでフィールドを呼び出すだけで、文字列が出力されます。

もちろん、フィールドは提出されませんが、それが私が起こりたかったことです。

0
GraemeMiller