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

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

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. Это очень важно.

Ответы [ 3 ]

9 голосов
/ 20 ноября 2011

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

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{...});
}
8 голосов
/ 20 ноября 2011

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

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

Foo View

  @Html.Action( "info", "home" ) 
1 голос
/ 20 ноября 2011

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

...