2010-01-14 6 views

Répondre

5

Vous ne devriez vraiment pas appeler une méthode dans le contrôleur à partir de la vue, c'est en arrière du modèle MVC. Les contrôleurs appellent des vues. Vous pouvez soit transmettre les données à la vue depuis le contrôleur tel qu'il est appelé, ou cela peut être une méthode qui appartient à une classe d'assistance que la vue peut utiliser.

Modifier: Good starter tutorial sur les aides si vous n'êtes pas familier.

+0

Refusée. Les contrôleurs collectent des données et les transmettent à la vue. Les vues n'appellent pas les contrôleurs. –

+1

Écrire une méthode d'assistance a fonctionné pour moi – Prasad

2

Perroquets est juste, vous ne devriez pas être accédez à un contrôleur d'une vue (aides d'utilisation comme il le dit), mais si vous devez:

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

Si vous avez besoin d'appeler quelque chose (qui vue shouldn » t faire, mais ...) vous pouvez donner une vue d'un rappel au lieu des contrôleurs de référencement dans la vue:

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

en vue

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

Mais vous vraiment vaut mieux ne pas le faire.

1

Si vous souhaitez injecter du texte dans votre page, vous pouvez appeler une action sur le contrôleur. Vous pouvez utiliser Html.RenderAction (<actionname>, <controllername>). Cela laissera tomber la chaîne dans votre vue.

Ceci est un moyen simple de remplir des parties d'une vue à partir de différents contrôleurs.

Alternativement, existe-t-il une raison pour laquelle vous ne pouvez pas appeler la méthode à partir de l'action générant la vue, et la placer dans ViewData/ViewBag? Vous pouvez alors y accéder à votre vue.

+0

exactement ce dont j'avais besoin – KingOfHypocrites

0

Parfois, il est nécessaire d'appeler la méthode du contrôleur de la vue, par exemple, regardez dans le mécanisme de gestion d'état gridview DevExpress here. Pour cela

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

est une très bonne solution.

Questions connexes