从视图中调用控制器?

时间:2009-11-10 13:36:47

标签: asp.net-mvc

  • 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调用ControllerAAA到View 1000并避免继承类? 类似的东西:

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

这可能吗?怎么样?

3 个答案:

答案 0 :(得分:4)

您可以使用

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

我认为你需要MVC期货......你可以从这里下载: MVC Futures

但是在使用它时你应该小心,因为它不符合MVC模式,你的视图应该是愚蠢的,只显示传递给它的数据。虽然它可以像导航菜单那样方便。

答案 1 :(得分:1)

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

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

通过更多描述你正在尝试做你正在做的事情的原因......我们或许可以提出更好的建议。

答案 2 :(得分:0)

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

  

Dryadwoods :我也可以在视图上使用ajax来调用控制器。

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

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

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

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

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