【问题标题】:partial views in another controller另一个控制器中的部分视图
【发布时间】:2011-06-09 14:12:03
【问题描述】:

我的问题是关于从不同控制器的视图列表返回视图。 (MVC3)

首先我使用的是区域,但在这种情况下,控制器和视图都在同一个区域中。

在控制器中; 在文档控制器中 我正在从 BelgeController 返回一个视图,例如

return View("~/Areas/Fin/Views/Belge/Details.cshtml", belgeView); 

问题出在Document和Belge这两个视图文件夹中,都有一个名为edit.cshtml的部分,在渲染Belge/Details视图时,Mvc发现并使用了错误的edit.cshtml,有没有简单的参考方法右局部视图。 我在整个项目中都使用了这种方法,所以有 100 多个 Edit.cshtml,所以我正在寻找一个简单的修复方法。

编辑: 那么,接下来的问题是如何使用 RedirectToAction 将模型传递给另一个控制器。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    我不确定用例,但一般来说,一个控制器不应该为另一个控制器负责的任何事情提供服务。它应该要么返回其赢取的视图,其中包含对另一个控制器的 RenderAction 调用,要么它应该进行重定向。

    【讨论】:

    • 视图应该能够显示数据,无论数据来自何处。
    • 是的,但这不是重点。如果视图“属于”另一个控制器,那么它应该由该控制器提供服务。如果是通用视图,那么它应该在 Shared 文件夹中。
    • @hazid> 顺便说一句,如果您有 100 个 Edit.cshtml,您可能会遇到困难。您是否看过使用 EditorFor 并创建自定义模板? bradwilson.typepad.com/blog/2009/10/…
    • 是的,我已经阅读了该博客。我已经有了自己的编辑器和 DisplayTemplates。
    【解决方案2】:

    你可以把局部视图放在 shared 中并给它一个特定的名称,即:BelgeDetails.cshtml

    然后你应该能够返回 View("BelgeDetails", belgeView);

    【讨论】:

    • 它们都被命名为“编辑”是有原因的,这是一个默认页面,就像布局/母版页一样,做一些常见的事情,然后立即呈现“编辑”部分。跨度>
    • 那么你打破了模式,应该遵循保罗的回答。
    【解决方案3】:

    如果您需要从另一个控制器返回视图,您应该使用 RedirectToAction。如果您需要分部视图,每个控制器都应该有自己的分部视图集,用于自己的目的。控制器旨在实现自助服务和自力更生。您的模式不应要求来自不同控制器的不同功能。

    也就是说,使用 jquery ajax 调用其他控制器来管理页面的动态元素(例如弹出模式等)是完全合理的。这将允许您创建动态页面元素,而无需将所有代码转储到一个控制器中。

    【讨论】:

    • 我不能使用重定向到操作,因为我需要发布的数据。我传递给另一个视图的模型是在内存中构建的,它还没有持久化。
    【解决方案4】:

    还有两个选项: 1)将数据在模型中的层中移动,使BelgeController的模型具有所需的信息,并调用RedirectToAction。 2) 使用传递给 RedirectToAction 的 ViewData 破解它。

    【讨论】:

      猜你喜欢
      • 2016-01-24
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多