Bezdepbonusu7Программирование: статьи и ответы

Вопрос

ASP.NET MVC: как отобразить другое действие (не представление) с моделью?

Автор вопроса: AlexОтветов: 3

Вернуть другой вид из контроллера очень просто:

return View("../Home/Info");

Однако мне нужна модель в информационном представлении. У меня много чего происходит в методе результата действия Info(). Я могу просто скопировать его и получить что-то вроде этого:

var infoModel = new InfoModel {
    // ... a lot of copied code here
}
return View("../Home/Info", infoModel);

Но это неразумно.

Конечно, я могу просто перенаправить:

return RedirecToAction("Info");

Но таким образом URL-адрес изменится. Я не хочу менять URL. Это очень важно.

controlleraction

Ответы

Ответ 1 · рейтинг 8 · tvanfosson

Похоже, вы хотите вызвать действие из другого контроллера. Я бы посоветовал вам просто отобразить представление, которое отображает это действие, используя Html.Action() вместо того, чтобы пытаться связать их вместе в контроллере. Если это неразумно, вы можете создать базовый контроллер, из которого могут быть получены оба контроллера, и поместить общий код для создания модели в базовый контроллер. Повторно используйте представление по мере необходимости.

  public ActionResult Foo()
  {
      return View();
  }

Фу Вид

  @Html.Action( "info", "home" )

Ответ 2 · рейтинг 9 · Andrew Barber

Вы можете вызвать право на другое действие из действия, например:

public ActionResult MyAction(){
   if(somethingOrAnother){
      return MyOtherAction();
   }
   return View();
}

//"WhichEverViewYouNeed" is required here since you are returning this view from another action
//if you don't specify it, it would return the original action's view
public ActionResult MyOtherAction(){
    return View("WhichEverViewYouNeed", new InfoModel{...});
}

Ответ 3 · рейтинг 1 · Daniel A. White

Почему бы просто не вызвать метод действия?

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы