web-dev-qa-db-ja.com

フォーム送信時にモデル全体を渡す

@Html.HiddenFor(m => m.parameter)を使用でき、フォームが送信されると、そのパラメーターがコントローラーに渡されることを理解しています。私のモデルには多くのプロパティがあります。

モデル全体を一度にコントローラーに渡すより短い方法がありますか、それとも毎回それを行う必要がありますか?

20
jpo

モデルはコントローラ全体に渡されますが、入力フィールドまたは非表示フィールドにバインドされていないプロパティの値は失われます。

クライアント側でフォームのプロパティをバインドするか、サーバー側でエンティティを再取得する必要があります。

@Html.HiddenFor(m => m.Model)のようなものを求めているようですが、それは不可能です。ごめんなさい

覚えておくべきことの1つは、大量の非表示フィールドがある場合、実際に必要なデータよりも多くのデータをビューに送信している可能性があることです。ビューモデルの採用を検討する

23
Forty-Two

これを見る他の人は、非表示のdivで@ Html.EditorForModel()を実行できます。また、モデルの各オブジェクトプロパティに対して@ Html.EditorFor(model => model.ObjectProperty)を使用する必要があります。

<div hidden="hidden">
  @Html.EditorForModel()
  @Html.EditorFor(model => model.ObjectProperty)
  @Html.EditorFor(model => model.ListOfObjectsProperty)
</div>
2
Jason McGraw

必要なプロパティのみを確認できます。

if (this.ModelState.IsValidField("Name"))
{
     // .....
}

の代わりに:

if (this.ModelState.IsValid)
{
     // .....
}
0
Samy Sammour

FORM要素を使用している場合、モデル全体がポストされます。モデルを使用する要素は、明らかにフォーム要素内にある必要があります

POST JQueryを使用して自分で言うフォーム

それについては、この他のスタックの問題を参照してください: jQuery AJAX submit form

「Alfrekjv」によるanwserをよく見てください

0
sacha

これはすでに組み込まれています。次のモデルを検討してください。

public class MyModel
{
    public string PropertyA { get; set; }
    public string parameter { get; set; }
}

そして、次のアクションを検討してください。

[HttpPost]
public ActionResult PostSomeData(MyModel model)
{
}

MVCはFormCollectionを活用し、可能な場合はMyModelクラスに入力します。フォームにPropertyAがない場合は、nullになります。ただし、inputプロパティにparameterがあるため、入力されます。

0
Mike Perrenoud