Вызов публичного метода в Controller из View в asp.net MVC2 - PullRequest
1 голос
/ 14 января 2010

У меня есть метод в контроллере, который возвращает строку.

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

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

Ответы [ 5 ]

5 голосов
/ 14 января 2010

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

Редактировать: Хороший стартовый урок о помощниках, если вы не знакомы.

2 голосов
/ 14 января 2010

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

<%= ((MyController)this.ViewContext.Controller).SomeMethod() %>
1 голос
/ 23 июня 2011

Если вы хотите вставить какой-либо текст на вашу страницу, вы можете вызвать действие на контроллере. Вы можете использовать Html.RenderAction (, ). Это сбросит строку в вашем представлении.

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

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

0 голосов
/ 30 мая 2013

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

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

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

0 голосов
/ 14 января 2010

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

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

в поле зрения

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

Но вы действительно лучше не делать этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...