1

我对它的工作原理感到非常困惑:

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

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

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

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

将不胜感激任何建议

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

4

1 回答 1

2

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

ModelState.Remove("specificvalue");

或核对整个模型

ModelState.Clear();

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

于 2012-05-31T04:14:17.037 回答