从asp.net MVC2中的View调用Controller中的公共方法

时间:2010-01-14 15:16:55

标签: asp.net asp.net-mvc

我在控制器中有一个返回字符串的方法。

我需要从我的视图中调用此方法来获取字符串并在视图中显示。

我正在使用MVC2。如何从View中调用控制器中的公共方法?

5 个答案:

答案 0 :(得分:5)

你真的不应该从视图中调用控制器中的方法,而是从MVC模式向后调用。控制器调用视图。您可以在调用时将数据传递给控制器​​中的视图,或者这可能是属于视图可以使用的帮助器类的方法。

如果您不熟悉,请在帮助者上编辑:Good starter tutorial

答案 1 :(得分:2)

鹦鹉是对的,你不应该从视图中访问控制器(按照他的说法使用助手),但如果你必须:

<%= ((MyController)this.ViewContext.Controller).SomeMethod() %>

答案 2 :(得分:1)

如果要在页面中注入一些文本,可以在控制器上调用操作。您可以使用Html.RenderAction(&lt; actionname&gt;,&lt; controllername&gt;)。这将删除视图中的字符串。

这是从不同控制器填充视图部分的简单方法。

或者,您是否有理由不能从生成视图的操作中调用该方法,并将其放在ViewData / ViewBag中?然后,您可以在视图中访问它。

答案 3 :(得分:0)

如果你需要调用某些东西(哪个视图不应该......),你可以提供一个回调视图,而不是在视图中引用控制器:

ViewData["callback"] = new Func<string>(() => "string");
// or for strongly typed views
Model.Callback = new Func<string>(() => "string");

在视图中

<%= ((Func<string>)ViewData["callback"])() %>
<%= Model.Callback() %>

但你真的最好不要这样做。

答案 4 :(得分:0)

有时需要从视图中调用控制器的方法,例如,查看DevExpress gridview状态管理机制here。为此

(ViewContext.Controller as MyController).SomeMethod();

是一个非常好的解决方案。