我在 MVC3 中有一个带有“pageModel”模型的页面。
在此页面中,我有:
@{ Html.RenderPartial("_subPage", Model.subModel); } (Pagemodel.submodel)
在我的 Controller 中,我正在做:
[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Results(pagemodel model, string frmAction)
{
}
页面第一次加载正常,但是当我回发到
httpPost
时行动,model.submodel
始终为空。我的问题是,如何从 RenderPartial 返回更新的模型(如果有的话)。我可以让我的模型进入局部,但不能返回!
最佳答案
部分的问题是它们不保留导航上下文。这意味着您可能放在此部分中的任何输入字段都将具有不正确的名称,并且默认模型绑定(bind)器将无法在您 POST 时检索回值。您的 HTML 将如下所示:
<input type="text" name="Prop1" value="property 1 value" />
<input type="text" name="Prop2" value="property 2 value" />
而正确的是:
<input type="text" name="subModel.Prop1" value="property 1 value" />
<input type="text" name="subModel.Prop2" value="property 2 value" />
为了实现这个正确的标记,我建议您使用编辑器模板。
所以你替换:
@{ Html.RenderPartial("_subPage", Model.subModel); }
和:
@Html.EditorFor(x => x.subModel)
然后你移动你的
_subPage.cshtml
部分进入 ~/Views/Shared/EditorTemplates/SubModelType.cshtml
在哪里 SubModelType
是 subModel
的类型属性(property):@model SubModelType
@Html.EditorFor(x => x.Prop1)
@Html.EditorFor(x => x.Prop2)
现在,当您查看生成的 HTML 时,相应的输入字段名称应以
subModel
为前缀。在 POST Controller 操作中,model.subModel
这次将根据用户在输入字段中输入的值正确初始化和填充属性。
关于asp.net-mvc-3 - MVC3 - 从 RenderPartial 传回模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9466426/