我对这是如何运作感到非常困惑:
我有一个由控制器呈现的局部视图。此部分视图通过Ajax调用呈现,并由控制器的ActionResult提供。部分视图是强类型的,并通过
模型呈现return this.PartialView("OuterPartialView", modelObject).
在这个局部视图中,我正在渲染另一个局部视图,也强烈地键入并绑定到同一个模型,通过@{ Html.RenderPartial("HiddenVariablesView", Model); }
调用渲染一小部分隐藏变量(我使用HiddenFor将它们注入到形式)。
问题:隐藏的输入变量在HTML中呈现为模型的空/默认值 - 就好像传递的模型只是通过默认构造函数创建的一样。更奇怪的是,当我在局部视图生成(“HiddenVariablesView”以及“OuterPartialView”)中放置一个断点时,我可以看到我的Model对象被正确填充。
非常感谢任何建议
编辑:“OuterPartialView”有一个提交回自身的表单(通过ajax),基本上用div中的新版本替换自己。似乎部分视图的模型恢复到最初在通过动作控制器的GET方法构造OuterPartialView时创建的模型。在提交期间调用控制器的任何POST方法,但在控制器内完成的对模型的更改不会反映在生成的HTML中
答案 0 :(得分:2)
根据设计,HTML帮助程序将首先查看您的POST / GET数据,并且仅在找不到任何内容时才使用您的模型。因此,如果您将模型发布到您的操作,创建新模型,设置它然后返回它,HTML帮助程序将不会使用这些新模型值。为了解决这个问题,你可以做到
ModelState.Remove("specificvalue");
或用
来核对整个模型ModelState.Clear();
有关更多解决方法,请参阅ASP.Net MVC Html.HiddenFor with wrong value。