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

时间:2012-05-31 02:04:27

标签: asp.net-mvc asp.net-mvc-3 razor partial-views

我对这是如何运作感到非常困惑:

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

模型呈现
return this.PartialView("OuterPartialView", modelObject).

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

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

非常感谢任何建议

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

1 个答案:

答案 0 :(得分:2)

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

ModelState.Remove("specificvalue");

或用

来核对整个模型
ModelState.Clear();

有关更多解决方法,请参阅ASP.Net MVC Html.HiddenFor with wrong value