【问题标题】:Calling controller from view?从视图中调用控制器?
【发布时间】:2009-11-10 13:36:46
【问题描述】:
  • Controller1 - Index() > 返回 View1
  • Controller2 - Index() > 返回 View2
  • Controller3 - Index() > 返回 View3 ....
  • Controller1000 - Index()> 返回 View1000

  • ControllerAAAA - GiveMeSomething(....) > 返回 PartialView1

目标: 将 View 1 上 PartialView1 的结果添加到 1000。

解决方案: 控制器 1 到 1000 可以从一个特殊的类继承,该类包含 ControllerAAAA 所需的强类型对象,然后我可以从视图中调用 PartialView1 并传递所需的对象。 我认为这是正确的做法。

其他选项:我也可以在视图上添加一些 ajax 来调用控制器。

但是我想知道我是否可以简单地从 View1 调用 Controller AAAA 到 View 1000 并避免继承类? 类似的东西:

<%= CallController("GiveMeSomething", "ControllerAAAA", new Parameters(value1: "something", value2: 11 )%>

这可能吗?怎么样?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    你可以使用

    <% Html.RenderAction<MyController>(m => m.LatestNews()); %>
    

    我认为您需要为此使用 MVC 期货...您可以从此处下载: MVC Futures

    但是在使用它时你应该小心,因为它不符合 MVC 模式,你的视图应该是哑的,只显示传递给它的数据。虽然它可以很方便地处理导航菜单之类的事情。

    【讨论】:

    • 是的,这就是我要找的。谢谢
    • 没问题,但不要用太多! ;)
    【解决方案2】:

    虽然有可能,但在 MVC 世界中,这绝对是一种糟糕的做法。

    如果您尝试渲染不同的局部视图,用于渲染它们的逻辑应该在它所属的 Controller 中。 View 仅用于渲染由 Controller 传递给它的 Model(或 ViewModel)。

    对您尝试做您正在做的事情的原因进行更多描述...我们也许可以提出更好的建议。

    【讨论】:

    • 这个。这是一千倍。 MVC 约束的好处之一是它使以后更容易理解。
    【解决方案3】:

    我同意贾斯汀的观点——你应该认真考虑一下你想在这里做什么。我相信,如果您提供更多详细信息,我们将能够提出更好的建议。如果这是你真正想做的,你可以使用外边缘的建议。

    Dryadwoods:我也可以在视图上添加一些 ajax 来调用控制器。

    如果您真的想使用 AJAX 进行此调用,jQuery 提供了一种简单的方法:

    $(document).ready(function() {
        $('#container').load('/url/to/action', { 
            Value1: <%= Model.Value1 %>,
            Value2: <%= Model.Value2 %>
        });
    });
    

    在这个例子中,容器是一个 ID 为“container”的 DOM 节点。将使用指定的 JSON 值对指定的 URL 进行 AJAX 调用。在您的控制器中,您将声明以下操作:

    ActionResult SomeAction(string Value1, string Value2)
    {
        // Return a partial
    }
    

    我没有测试任何代码,因此您可能需要进行一些调整。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      相关资源
      最近更新 更多