Вернуть другой вид из контроллера очень просто:
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. Это очень важно.
Ответ 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{...});
}