2010-01-14 60 views

回答

5

你真的不應該從視圖中調用控制器中的方法,這是從MVC模式向後。控制器調用視圖。您可以在調用它時將數據傳遞給控制器​​的視圖,也可以是屬於視圖可以使用的幫助器類中的方法。

編輯:Good starter tutorial傭工如果你不熟悉。

+0

Upvoted。控制器收集數據並將它們傳遞給視圖。視圖不會呼叫控制器。 – 2010-01-14 15:21:04

+1

寫一個幫手方法對我有用 – Prasad 2010-01-14 18:28:16

2

鸚鵡是正確的,你不應該從一個視圖訪問控制器(如他所說的使用傭工),但如果你必須:

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

如果您需要調用的東西(其中查看不該」做T,但是......),你可以提供查看了回調,而不是在視圖中引用的控制器:

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

鑑於

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

但是你真的最好不要這樣做。

1

如果你想在你的頁面注入一些文本,你可以在控制器上調用一個動作。您可以使用Html.RenderAction(<操作名稱>,<控制器名稱>)。這會在您的視圖中刪除字符串。

這是從不同控制器填充視圖各部分的簡單方法。

另外,是否有一個原因,你不能從產生視圖的操作中調用該方法,並將其放入ViewData/ViewBag中?您可以在視圖中訪問它。

+0

正是我需要的 – KingOfHypocrites 2015-01-26 22:06:50

0

有時需要從視圖中調用控制器的方法,例如,查看DevExpress gridview狀態管理機制here。爲此

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

是一個很好的解決方案。

相關問題