首页 文章

使用 MVC3 中的 PartialView 内部的 RenderPartial ASP.NET

提问于
浏览
1

我对这是如何工作完全感到困惑:

我有一个由控制器呈现的局部视图。此部分视图通过 Ajax 调用呈现,并由控制器的 ActionResult 提供。部分视图是强类型的,并使用模型通过渲染

return this.PartialView("OuterPartialView", modelObject).

在这个局部视图中,我正在渲染另一个局部视图,也是强类型并绑定到同一个模型,通过@{ Html.RenderPartial("HiddenVariablesView", Model); }调用呈现一小部分隐藏变量(我使用 HiddenFor 将它们注入到表单中)。

问题是:隐藏的输入变量在 HTML 中呈现为模型的 empty/default 值 - 好像传递的模型只是通过默认构造函数创建的。更奇怪的是,当我在局部视图生成(“HiddenVariablesView”以及“OuterPartialView”)中放置一个断点时,我可以看到我的 Model 对象被正确填充。

非常感谢任何建议

编辑:“OuterPartialView”有一个提交回自身的表单(通过 ajax),基本上用 div 中的新版本替换自己。似乎部分视图的模型恢复到最初在通过动作控制器的 GET 方法构造 OuterPartialView 时创建的模型。在提交期间调用控制器的任何 POST 方法,但在控制器内完成的对模型的更改不会反映在生成的 HTML 中

1 回答

  • 2

    根据设计,HTML 帮助程序将首先查看您的 POST/GET 数据,并且仅在未找到任何内容时才使用您的模型。因此,如果您将模型发布到您的操作,创建新模型,设置它然后返回它,HTML 帮助程序将不会使用这些新模型值。为了解决这个问题,你可以做到

    ModelState.Remove("specificvalue");
    

    用或核对整个模型

    ModelState.Clear();
    

    有关更多解决方法,请参阅ASP.Net MVC Html.HiddenFor,值错误

相关问题