【发布时间】:2012-05-31 02:04:26
【问题描述】:
我完全不知道这是如何工作的:
我有一个由控制器呈现的局部视图。此部分视图通过 Ajax 调用呈现,并由控制器的 ActionResult 提供服务。 Partial View 是强类型的,通过
用模型渲染return this.PartialView("OuterPartialView", modelObject).
在这个局部视图中,我通过@{ Html.RenderPartial("HiddenVariablesView", Model); } 调用呈现另一个局部视图,它也被强类型化并绑定到同一个模型,该调用呈现隐藏变量的一小部分(我使用 HiddenFor 将它们注入到表单中) .
问题是:隐藏的输入变量在 HTML 中呈现为模型的空/默认值 - 就好像传递的模型只是通过默认构造函数创建的一样。更奇怪的是,当我在局部视图生成(“HiddenVariablesView”和“OuterPartialView”)中放置一个断点时,我可以看到我的模型对象被正确填充。
希望有任何建议
编辑:“OuterPartialView”有一个提交回自身的表单(通过 ajax),基本上用 div 内的新版本替换自身。看起来局部视图的模型正在恢复为通过动作控制器的 GET 方法构造 OuterPartialView 时最初创建的模型。在提交期间会调用控制器的任何 POST 方法,但在控制器内部对模型所做的更改不会反映在生成的 HTML 中
【问题讨论】:
-
我不确定是什么导致了您的问题,但我可以验证通过传递自己的模型让局部视图呈现另一个局部视图不会导致您描述的行为。一定还有别的问题。旁注:不应该是 @{ Html.RenderPartial("HiddenVariablesView", Model); }?
-
感谢回复。是的,你描述的 RenderPartial 语法就是我使用它的方式......是从内存中输入的
-
嘿,你能试试@Html.Partial("HiddenVariablesView", Model) P.S 当你检查元素时字段是空的还是提交表单时是空的?
-
刚试过。同样的结果...我还可以将@Html.Partial() 调用的结果输出到即时窗口,并查看它生成的具有默认值的 HTML。
-
在您创建新模型的 ajax 帖子中...如果您添加 ModelState.Clear();就在使用新模型返回部分视图之前,这是否解决了您的问题?
标签: asp.net-mvc asp.net-mvc-3 razor partial-views