我在控制器中有一个返回字符串的方法。
我需要从我的视图中调用此方法来获取字符串并在视图中显示。
我正在使用MVC2。如何从View中调用控制器中的公共方法?
答案 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();
是一个非常好的解决方案。