asp.net-mvc-3 - MVC3 - 从 RenderPartial 传回模型

标签 asp.net-mvc-3 razor

我在 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在哪里 SubModelTypesubModel 的类型属性(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/

相关文章:

c# - MVC3 [Required] 验证消息显示在表单提交之前

c# - 在 ASP.NET Web 应用程序中禁用 Razors 默认 .cshtml 处理程序

c# - JSON 自动完成,不显示结果

asp.net - ViewEngines 会影响 Asp.Net MVC 的性能吗?

c# - 使用 Controller 级别异常日志记录 (IExceptionFilter.OnException) 时会漏掉哪些异常?

asp.net-mvc-3 - 尝试在 View 中显示枚举中的 "Name"属性

c# - VS2017中的MVC 3错误: The name 'ViewData' does not exist in the current context

asp.net-mvc - Razor 嵌套 WebGrid

c# - Webgrid:排序后维护过滤器

css - 网站发布时提供的 MVC 应用程序模板圆 Angular 消失