2010-01-14 3 views
1

У меня есть метод в контроллере, который возвращает строку.Вызвать открытый метод в контроллере из представления в asp.net MVC2

Мне нужно вызвать этот метод из моего представления, чтобы получить строку и показать в представлении.

Я использую MVC2. как я могу вызвать публичный метод в контроллере из представления?

ответ

5

Вы действительно не должны вызывать метод в контроллере из представления, это в обратном направлении из шаблона MVC. Контроллеры вызывают представления. Вы можете либо передать данные в представление с контроллера, как он был вызван, либо это может быть метод, который принадлежит классу помощников, который может использовать вид.

Редактировать: Good starter tutorial на помощников, если вы не знакомы.

+0

Приобретено. Контроллеры собирают данные и передают их в представление. Представления не вызывают контроллеры. –

+1

Написание вспомогательного метода для меня работало – Prasad

2

Попугаи правильно, вы не должны получать доступ к контроллеру с точки зрения (использование хелперов, как он говорит), но если вы должны:

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

Если вам нужно вызвать что-то (какой вид не должен» т сделать, но ...) вы можете обеспечить представление с обратным вызовом вместо ссылающихся контроллеров в представлении:

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 (< имя-действия >, <controllername>). Это приведет к потере строки в вашем представлении.

Это простой способ заполнить части вида с разных контроллеров.

В качестве альтернативы, есть причина, по которой вы не можете вызвать метод из действия, генерирующего представление, и поместить его в ViewData/ViewBag? Затем вы можете получить доступ к нему в своем представлении.

+0

именно то, что мне нужно – KingOfHypocrites

0

Иногда необходимо вызвать метод контроллера из вида, например, взглянуть на механизм управления состоянием gridview DevExpress here. Для этого

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

- довольно хорошее решение.

Смежные вопросы