在View上使用RenderPartial提交模型

时间:2013-09-11 23:15:25

标签: asp.net-mvc-4 razor

想象一下:

有一个视图。 这个视图的模型有以下形式:

Id
List<Food>
每个食物中都有:

Id
Name
List<Ingredients>

每种成分包含:

Id
Name
Qty

这是一个型号。

我有一个视图,它接受了这个模型。 然后我有一个局部视图,它接受列表并在屏幕上呈现它。 但是,当提交表单时(按钮位于主视图上),数据无法绑定/未显示在模型中。

能够将数据绑定回来的正确方法是什么?

当我把整个事情放在主视图本身但是由于可重用性原因时,它确实有效,因此在部分视图中使用它是有意义的,所以我可以在任何页面上“删除”它并传递数据

部分视图包含:

@model List<FoodProject.Web.Models.FoodViewModel>

由于

更新

我尝试使用EditorTemplate,似乎几乎尊重模型绑定约定,就像之前使用Html.Partial一样。那产生的东西就像:

[0].PropertyName

而不是:

ModelName[0].PropertyName

模板编辑器几乎就在那里,但是给了我:

ModelName.[0].Id

我相信这就是为什么在发布时,我会在模型集合中获得null 我怎样才能让它尊重模型绑定?我哪里错了?

1 个答案:

答案 0 :(得分:1)

你应该接近编辑模板,因为这对我有用。我会展示我的例子,也许它会帮助你看出你的错误。

模特:

public class TestModelA
{
    public List<TestModelB> PropA { get; set; }
}

public class TestModelB
{
    public string PropB { get; set; }
}

位于 Views / Shared / EditorTemplates 中的编辑模板( TestModelB.cshtml ):

@model MvcTest.Models.TestModelB
@Html.EditorFor(m => m.PropB)

主要观点:

@model MvcTest.Models.TestModelA
@using (Html.BeginForm())
{
    @Html.EditorFor(m => m.PropA)
    <input type="submit" value="Submit" />
}