私はMVC4Razorで自分の足を見つけようとしていますが、この単純な問題で立ち往生しています。
@ Html.DisplayForを使用すると、モデルは常にNULLとして返送されますが、@ Html.TextBoxForを使用すると、このモデルは完全に入力されますが、何が欠けていますか?
前もって感謝します
私はMVC4Razorで自分の足を見つけようとしていますが、この単純な問題で立ち往生しています。
@ Html.DisplayForを使用すると、モデルは常にNULLとして返送されますが、@ Html.TextBoxForを使用すると、このモデルは完全に入力されますが、何が欠けていますか?
前もって感謝します
これは、asp.net mvc フレームワークで多くの人が見逃している一般的な問題です。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
ユーザー入力を許可する場合、またはユーザーがフィールドを編集できるようにする場合に使用します。
編集
"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
ます。
DisplayFor
モデルバインディングを行いません。TextBoxFor
フォームに要素を作成し、input
投稿時にフォームがそれを処理できるためです。HttpPost アクションでデータを取得したいが、TextBoxFor を使用したくない場合は、HiddenFor
このような HTML ヘルパー メソッドを使用して、フォーム内の隠し変数にその pirticulare モデル プロパティを保持できます。
@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
を使用しHiddenFor
ます。DisplayFor
単にテキストを表示するだけで、入力フィールドではないため、ポストバックされません。 HiddenFor
実際に作成します<input type="hidden" value="xxxx"/>
DisplayFor
入力ではなく、HTML ラベルを作成します。ラベルはサーバーに POST されませんが、入力は POST されます。
フォーム投稿中ということですか?DisplayFor を使用すると、フォーム値を含まない要素が作成されます。通常、これらを組み合わせて使用してテキスト ボックスのラベルを作成し、Html.TextBoxFor を使用してユーザーがデータ要素を変更できるようにします。
例:
@Html.DisplayFor(x=>x.Item)
@Html.TextBoxFor(x=>x.Item)
レンダリングします
Item <a text input field following>
またはHTMLで
<label for="Item">Item</label><input type="Text" id="Item" name="Item"/>