【发布时间】:2011-04-25 21:22:22
【问题描述】:
在 MVC3 Razor 中,如何创建一个包含多个表单的页面,让每个表单都是用自己的模型渲染的局部视图?
我们一直在尝试各种形式的调用 Html.RenderPartial(),传入部分视图名称以及我们通过 ViewBag 访问的模型实例,但我们尝试过的每种方法似乎都有严重的问题问题,因此我们必须对这在理想世界中应该如何运作有一个根本的误解。
我们发现了一些关于类似主题的 SO 回复 (like this one) 推荐了一个“超级模型”,其中包含对我们的局部视图可能需要使用的每个子模型的引用,但我们找不到您将如何使用的示例实际使用这些子模型的数据,例如尝试编写 EditorTemplates 时。
编辑:让我澄清一下我的问题。我们能够渲染局部视图甚至是动作(使用 Mark S. 推荐的 RenderAction)。但是,我们的主要问题是当这些表单提交回时,例如将模型的状态保存在该部分视图区域中,控制器似乎不知道我们引用的是什么模型。我们应该如何调用控制器?
我们尝试了几种不同的方式来呈现这些局部视图。我们的第一次尝试是这样的:
@using (Html.BeginForm("SaveAccountInfo", null, FormMethod.Post, new { id = "section1-form" }))
{
@Html.EditorForModel("AccountInfo", (OurModels.AccountInfo) ViewBag.account_info)
}
ViewBag.account_info 包含这一局部视图的模型数据。
我们也尝试过:
@{Html.RenderPartial("FormAccountInfo", (OurModels.AccountInfo) ViewBag.account_info);}
现在:
@{Html.RenderAction("FormAccountInfo", "Main", new { account_info = (OurModels.AccountInfo) ViewBag.account_info }); }
但是无论我们使用哪种方法在页面上呈现这个表单,当该表单被提交进行处理时,我们似乎无法通过模型访问任何提交的数据?我觉得我们在做一些非常愚蠢的事情,但我们是 MVC 的新手。
【问题讨论】:
标签: asp.net-mvc-3 razor models