私はMVC4 Razorで足を見つけようとしていますが、この単純な問題に悩まされています。MVC4 Razor - @ Html.DisplayForモデルにバインドしていません
私は@ Html.DisplayForを使用すると、モデルは常にNULLとして返されますが、@ Html.TextBoxを使用すると、このモデルは完全に埋め込まれていますが、何が欠けていますか?事前に
おかげ
私はMVC4 Razorで足を見つけようとしていますが、この単純な問題に悩まされています。MVC4 Razor - @ Html.DisplayForモデルにバインドしていません
私は@ Html.DisplayForを使用すると、モデルは常にNULLとして返されますが、@ Html.TextBoxを使用すると、このモデルは完全に埋め込まれていますが、何が欠けていますか?事前に
おかげ
をレンダリングします。 HiddenFor
、DisplayFor
、TextBoxFor
などのヘルパーの違いだけでなく、フレームワークがこれらの入力を自動的に収集して検証する方法を正確に設定します。この魔法はすべて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?"
あなたはHiddenFor
とDisplayFor
のデュオでこれを達成することができます。 HiddenFor
を使用して転記可能な値を設定し、DisplayFor
を使用して値を表示します。
とても素敵です。ありがとうございます。 – mostafakvd
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" />
}
DisplayFor
は、入力ではなくHTMLラベルを作成します。ラベルはサーバーにはPOSTされませんが、入力はありません。
フォームの投稿中に意味がありますか? 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"/>
DisplayFor
とHiddenFor
の両方を使用してください。 DisplayFor
は単にテキストを表示し、入力フィールドではないため、投稿されません。 HiddenFor
実際に作成します<input type="hidden" value="xxxx"/>
フィールドを「ラベル」として表示する必要があります。これが理由です;このビューの目的は、ユーザーがデータベースにデータを送信する前にデータを表示できるようにすることです。どのように私はこれを達成することができる任意のアイデア? – Jacques