2012-06-15 14 views
27

私はMVC4 Razorで足を見つけようとしていますが、この単純な問題に悩まされています。MVC4 Razor - @ Html.DisplayForモデルにバインドしていません

私は@ Html.DisplayForを使用すると、モデルは常にNULLとして返されますが、@ Html.TextBoxを使用すると、このモデルは完全に埋め込まれていますが、何が欠けていますか?事前に

おかげ

+0

フィールドを「ラベル」として表示する必要があります。これが理由です;このビューの目的は、ユーザーがデータベースにデータを送信する前にデータを表示できるようにすることです。どのように私はこれを達成することができる任意のアイデア? – Jacques

答えて

51

をレンダリングします。 HiddenForDisplayForTextBoxForなどのヘルパーの違いだけでなく、フレームワークがこれらの入力を自動的に収集して検証する方法を正確に設定します。この魔法はすべてHTML5のdata- *属性で行われます。 data-val,data-val-requiredの形式でいくつかの追加のプロパティが存在する可能性があり、おそらくタイプのいくつかの追加のデータプロパティがあることがわかった入力タグを見ると、数値はdata-val-numberになります。

これらのデータ属性を使用すると、jQuery拡張機能jquery.validate.unobtrusive.jsはDOMを解析し、エラーメッセージを検証または生成するフィールドを決定できます。

投稿されたデータの実際の収集は、nameプロパティから反映されます。これは、c#またはvb [HttpPost]メソッドにあるモデルにマップする必要があります。

ユーザーが気にする必要のない投稿データを提供する場合は、HiddenForを使用してください。

DisplayForを使用すると、レコードを表示できますが、編集はできません。

ユーザーの入力を許可するか、ユーザーがフィールドを編集できるようにする場合は、TextBoxForを使用します。

EDIT

"the purpose of this view is to enable the user to view the data before submitting it to the database. Any ideas how I can achieve this?"

あなたはHiddenForDisplayForのデュオでこれを達成することができます。 HiddenForを使用して転記可能な値を設定し、DisplayForを使用して値を表示します。

+0

とても素敵です。ありがとうございます。 – mostafakvd

15

DisplayForは結合モデルを行うことはありません。 TextBoxForはフォームにinput要素を作成し、フォームを投稿するときにフォームを処理できるためです。 HttpPostアクションでデータを取得したいのにTextBoxForを使用したくない場合は、HiddenFor HTMLヘルパーメソッドを使用して、フォーム内の隠し変数にそのpirticulareモデルをproeprtyにすることができます。

@using(Html.BeginForm()) 
{ 
    <p>The Type Name is</p> @Html.DisplayFor(x=>x.TypeName) 
    @Html.HiddenFor(x=>x.TypeName) 
    <input type="submit" value="Save" /> 
} 
+0

こんにちは、 "ラベル"としてフィールドを表示する必要があります。 これが理由です。このビューの目的は、ユーザーがデータベースにデータを送信する前にデータを表示できるようにすることです。 どのように私はこれを達成することができますか? – Jacques

+0

!@jacques:そのため、Displayforを使用してデータをユーザーに表示し、HiddenForを使用してそれらを隠し変数に保ち、フォームポストを行うことをお勧めします。 – Shyju

1

DisplayForは、入力ではなくHTMLラベルを作成します。ラベルはサーバーにはPOSTされませんが、入力はありません。

0

フォームの投稿中に意味がありますか? DisplayForを使用すると、フォーム値を含まない要素が作成されます。通常、これらを相互に組み合わせて使用​​してテキストボックスのラベルを作成し、次にHtml.TextBoxForを使用してユーザーがデータ要素を変更できるようにします。

例:

@Html.DisplayFor(x=>x.Item) 
@Html.TextBoxFor(x=>x.Item) 

これは多くの人がasp.net MVCフレームワークで欠場という共通の課題である

Item <a text input field following> 

またはHTML

<label for="Item">Item</label><input type="Text" id="Item" name="Item"/> 
5

DisplayForHiddenForの両方を使用してください。 DisplayForは単にテキストを表示し、入力フィールドではないため、投稿されません。 HiddenFor実際に作成します<input type="hidden" value="xxxx"/>

関連する問題