【问题标题】:RenderPartial using inside PartialView in MVC3 ASP.NETRenderPartial 在 MVC 3 ASP.NET 中使用内部局部视图
【发布时间】: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


【解决方案1】:

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

ModelState.Remove("specificvalue");

或用 核对整个模型

ModelState.Clear();

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

【讨论】:

    猜你喜欢
    • 2010-11-09
    • 2011-09-04
    • 1970-01-01
    • 2013-03-29
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    相关资源
    最近更新 更多