如何从局部视图中传递父模型

时间:2011-06-17 05:08:57

标签: asp.net asp.net-mvc-2 partial-views

我正在渲染一个parital视图,它在控制器中有一个带有HttpPost动作的提交按钮。此操作方法需要父模型作为其参数。有没有办法从父视图中发送父模型作为第一个参数?

主视图 - > aspx文件,其模型为ParentModel

部分视图 - > ascx文件,其模型为ParentModel.ChildModel

控制器操作 - > MyActionName(ParentModel模型,int方向,int用户)

如果我将方法保留为HttpPost,那么默认情况下会传递父模型但是我不能发送第二个和第三个参数,因为它们的值是在运行时决定的,而这些不是childmodel属性。例如direction参数,指示用户是否单击了next / prev按钮。在这种情况下,next和prev按钮调用相同的操作方法(MultipleAction submit)

其他信息:我的父模型有一个子模型的集合。我循环遍历此集合并为每个项目调用RenderPartial。所以,我不能将这个父模型直接传递给我的局部视图(这是默认行为) 有什么建议吗?感谢..

1 个答案:

答案 0 :(得分:1)

您可以将所有这些部分包装到HTML <form>中,以便在发布此表单时提交服务器的所有值:

<% using (Html.BeginForm()) { %>

    <%= Html.TextBoxFor(x => x.SomePropertyOfParent) %>
    <%= Html.TextBoxFor(x => x.SomeOtherPropertyOfParent) %>

    <%= Html.EditorFor(x => x.Children) %>

    <input type="submit" value="OK" />
<% } %>

我使用编辑器模板而不是Children集合的部分。将自动为此子集合的每个元素呈现自定义编辑器模板,并提供允许修改它的任何输入字段。

然后,当最终提交表单时,模型绑定器重建ParentModel所需的所有属性将被发送到服务器。就方向和用户参数而言,我会将它们作为父视图模型的一部分,以便我的POST控制器操作如下所示:

[HttpPost]
public ActionResult MyActionName(ParentViewModel model)
{
    ...
}