ASP.NET フォームの使用経験はありますが、MVC は初めてです。
ポストバック時に共有ビューからデータを取得するにはどうすればよいですか?
ASP.NET Forms では、次のように記述できます。
ASP.NET フォーム:
モデルコード:
public class MyModelItem
{
// Just TextBox is enough for editing this
public string SimpleProperty { get; set; }
// For this property separate NestedItemEditor.ascx is required
public MyModelNestedItem ComplexProperty { get; set; }
}
public class MyModelNestedItem
{
public string FirstProperty { get; set; }
public string SecondProperty { get; set; }
}
行動:
MyModelNestedItem を編集するためのコントロールは別の ASCX コントロール NestedItemEditor.ascx です
これは単なる例です。 MyModelNestedItem はもっと複雑になる可能性があります。私が何を意味するのかを説明したいだけです。
このアイテムを編集用に表示すると、1 つの asp:TextBox と 1 つの NestedItemEditor.ascx が表示されます。ページのポストバックで、両方からデータを収集しています。それだけです。
MVC の問題:
このシナリオを MVC で実装しようとしているときは、カスタマイズされた EditorFor を使用しています (UIHint を使用して共有ビューを作成することにより)。したがって、この共有ビューViews\Shared\EditorTemplates\MyModelNestedItem.cshtmlは、既に MyModelNestedItem プロパティにあるデータを表示できるようになりましたが、新しく入力されたデータを返す方法がわかりません。
親コントローラーが投稿リクエストを受け取ると、データは Request.Form にあるように見えますが、どの方法でデータに到達するのが文明的ですか? 確かに、最善の解決策は、データがMyModelItem.ComplexPropertyに自動的にフェッチされる場合です。