2

私の最終的な質問はこれです-モデルバインダーはすべてのモデルにデータを入力する必要がありますか、それとも投稿されているビットのみにデータを入力し、コントローラーに残りのデータを入力させる必要がありますか?

たとえば、システムに製品を追加していて、フォームで新しい製品を表示するサイトをユーザーに選択してもらいたいとします。したがって、私のモデルでは、「AllAvailableSites」というコレクションにデータを入力して、ユーザーが選択できるチェックボックスを表示したいと思います。また、フォームが検証されない場合に備えて、モデルに選択したサイトを投稿に入力する必要があります。また、最初の選択を示すフォームを表す必要があります。モデルバインダーにモデル上の選択されたサイトを設定させ、(コントローラーメソッドで一度)モデルに「AllAvailableSites」を設定させる必要があるように思われます。それは正しいですか?モデルバインダーにすべてを設定する方が効率的ですが、誰かがそれが正しくないことを示唆しています。

アドバイスに感謝します。オンラインでのすべてのMVCモデルバインディングヘルプは、複雑なものではなく、本当に単純な例を引用しているように思われると言わざるを得ません。

また、メソッドのGETバージョンとPOSTバージョンが本当に必要ですか?彼らは同じビューモデルを取ることはできませんか?次に、モデルバインダーがGET / POSTであるかどうかをチェックインし、それに応じてすべてのモデルにデータを入力します。

4

1 に答える 1

0

あなたの最初の結論は健全です。モデルバインダーは、モデルのインスタンスを作成し、そのプロパティにアクションコンテキストから利用できる値(たとえば、値の投稿)を入力してから、検証を実行することだけを気にする必要があります。次に、コントローラーは、使用可能なサイトのリストなど、ビューに必要な追加の値を入力する責任があります。

個別のGET/POSTメソッドが必要なことについてあなたが何を意味するのか完全にはわかりません。モデルのインスタンスを保存または作成する場合は、投稿する必要があるため、GET部分は無関係のように見えます。あなたが次のようなことを意味しない限り:

[HttpGet, ActionName("Edit")]
public ActionResult Edit(MyModel model)
{
   return View(model);
}

[HttpPost, ActionName("Edit")]
public ActionResult SaveEdit(MyModel model)
{
   // validate and save, then
   return View(model);
}

おそらく、それらを1つのアクションにまとめて、編集フォームを表示しているのか、アクション内で編集フォームの結果を投稿しているのかを把握できるのではないかと考えているかもしれません。これを行わないことを強くお勧めします。さまざまな理由がありますが、それを維持しましょう。それをしないでください。

于 2012-04-12T09:21:50.057 に答える