Вызов контроллера из поля зрения? - PullRequest
1 голос
/ 10 ноября 2009
  • Контроллер1 - Индекс ()> Возврат Вид1
  • Контроллер2 - Индекс ()> Возврат Вид2 ​​
  • Контроллер3 - Индекс ()> возврат View3 ....
  • Controller1000 - Index ()> return View1000

  • ControllerAAAA - GiveMeSomething (....)> return PartialView1

Цель: Добавьте результат PartialView1 в представление 1 к 1000.

Решения: Контроллеры от 1 до 1000 могут наследоваться от специального класса, который содержит строго типизированный объект, необходимый для ControllerAAAA, и тогда я мог бы вызвать, из представления, PartialView1 и передать необходимый объект. Я думаю, что это правильный способ сделать это.

Другой вариант: у меня также может быть несколько ajax для просмотра контроллера.

Однако Я хотел бы знать, могу ли я просто вызвать контроллер AAAA из View1 в View 1000 и избежать унаследованного класса? Что-то вроде:

<%= CallController("GiveMeSomething", "ControllerAAAA", new Parameters(value1: "something", value2: 11 )%>

Возможно ли это? Как?

Ответы [ 3 ]

4 голосов
/ 10 ноября 2009

Вы можете использовать

<% Html.RenderAction<MyController>(m => m.LatestNews()); %>

Я думаю, что для этого вам нужны фьючерсы MVC, которые вы можете скачать здесь: MVC Фьючерсы

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

1 голос
/ 10 ноября 2009

Хотя это и возможно, в мире MVC это определенно плохая практика.

Если вы пытаетесь визуализировать различные частичные представления, логика, используемая для их визуализации, должна находиться в контроллере, к которому он принадлежит. Представление предназначено исключительно для визуализации модели (или модели представления), которая была передана ему контроллером.

С чуть более подробным описанием причины, по которой вы пытаетесь делать то, что делаете ... мы могли бы сделать лучшее предложение.

0 голосов
/ 10 ноября 2009

Я согласен с Джастином - вы должны серьезно подумать, что именно вы хотите сделать здесь. Я уверен, что если вы предоставите более подробную информацию, мы сможем сделать лучшие предложения. Если это то, что вы действительно хотите сделать, вы можете воспользоваться предложением внешнего края.

Дриадвудс : У меня также может быть некоторый ajax для вызова контроллера.

Если вы действительно хотите сделать этот вызов с использованием AJAX, jQuery предоставляет простой способ сделать это:

$(document).ready(function() {
    $('#container').load('/url/to/action', { 
        Value1: <%= Model.Value1 %>,
        Value2: <%= Model.Value2 %>
    });
});

В этом примере контейнер - это узел DOM с идентификатором «контейнер». Будет выполнен вызов AJAX по указанному URL с указанными значениями JSON. В вашем контроллере вы бы объявили следующее действие:

ActionResult SomeAction(string Value1, string Value2)
{
    // Return a partial
}

Я не тестировал ни один из этих кодов, поэтому вам, возможно, придется внести некоторые коррективы. Надеюсь, это поможет!

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