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 )%>
这可能吗?怎么样?
答案 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
}
我没有测试任何此代码,因此您可能需要进行一些调整。希望这有帮助!