首页 文章

ASP.NET MVC:如何使用模型呈现不同的操作(而不是视图)?

提问于
浏览
4

从Controller返回不同的视图非常容易:

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

但是,我需要在Info视图中使用一个模型 . 我在Info()动作结果方法中有很多东西 . 我可以复制它,并有这样的事情:

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

但那是不合理的 .

当然我可以重定向:

return RedirecToAction("Info");

但这样URL就会改变 . 我不想更改URL . 这非常重要 .

3 回答

  • 1

    您可以在操作中调用另一个操作,如下所示:

    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{...});
    }
    
  • 9

    为什么不只是调用动作的方法?

  • 8

    看起来您想要从不同的控制器调用操作 . 我建议您可能只想渲染一个使用Html.Action()呈现该操作的视图,而不是尝试将两者绑定在控制器中 . 如果这是不合理的,那么您可能想要创建一个基本控制器,两个控制器都可以从中派生并放置共享代码以在基本控制器中生成模型 . 根据需要重用视图 .

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

    Foo View

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

相关问题