1

私は ASP.NET MVC 4 を使用していますが、この質問の目的には問題ないと思います。

私の編集ビューには比較的複雑なモデルがあります。このような:

public class Recipe_model
{
    public string Name { get; set; }

    public List<Recipe_Ingredient_model> Ingredients { get; set; }
}

成分はどこにありますか

public class Recipe_Ingredient_model
{
    public int RecipeID { get; set; }

    public int? UnitID { get; set; }

    public double? Quantity { get; set; }

    public Ingredient_model Ingredient { get; set; }
}

それ自体に Ingredient モデルが含まれています。

このためのフォームを作成すると、ビルトインHtml.EditorFor()は のプロパティを超えて機能しないため、Recipe_model部分ビューを使用して各サブモデルのエディターを表示しています。

インターフェイスに関する限り、それは正常に機能しますが、フォームをコントローラーに送信し、Recipe_model自動的に使用してバインドしようとすると

    [HttpPost]
    public ActionResult Edit(Recipe_model model)
    {
        return View(model);
    }

部分ビューの入力要素の ID が正しいパターン (ParentModel_Property だと思います) に準拠していないため、失敗します。

部分ビューで id をハードコーディングするか、コントローラーから手動でバインドすることから短く、FormCollection送信時にモデルが自動的にバインドされるように、部分ビューで生成された正しい id を取得する方法はありますか?

4

2 に答える 2

0

これは一般的な問題です。単純なパーシャルの代わりに、EditorTemplates(モデル用の特別なフォルダー)を使用すると、バインディングが自動的に機能します。

たとえば、次の質問を見てください:同じビュー内の複数のアイテムを更新する

于 2012-10-16T07:30:20.303 に答える
0

@WebDeveloper によって与えられた回答に加えて
、カスタム モデル バインダーを試して作成することもできますが、もう少し複雑ですが、長期的にはオブジェクトへのフォーム値の投稿とバインドが容易に
なりますhttp://をご覧ください。 patrickdesjardins.com/blog/asp-net-mvc-model-binding

すべてのフォーム値を手動で取得し、それらをmodel一度にバインドする必要があります。その後@HtmlFrom、かみそりのメソッドを使用して何でも行うことができます。内のオブジェクト内のすべての値action methodsを好きなように取得します。

于 2012-10-16T07:37:31.830 に答える