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

Asp.net mvc NET MVC:如何使用模型呈现不同的操作(而不是视图)?,asp.net-mvc,controller,action,Asp.net Mvc,Controller,Action,从控制器返回不同的视图非常容易: return View("../Home/Info"); 然而,我需要一个模型在信息视图。我在Info()action result方法中有很多内容。我可以复制它,然后有这样的东西: var infoModel = new InfoModel { // ... a lot of copied code here } return View("../Home/Info", infoModel); public ActionResult MyAction

从控制器返回不同的视图非常容易:

return View("../Home/Info");
然而,我需要一个模型在信息视图。我在Info()action result方法中有很多内容。我可以复制它,然后有这样的东西:

var infoModel = new InfoModel {
    // ... a lot of copied code here
}
return View("../Home/Info", infoModel);
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{...});
}
但这是不合理的

当然,我可以重定向:

return RedirecToAction("Info");

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

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

var infoModel = new InfoModel {
    // ... a lot of copied code here
}
return View("../Home/Info", infoModel);
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{...});
}

为什么不直接调用操作的方法呢?

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

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

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

视图将与最初调用的操作相对应,除非您明确指定所需的视图。@tvanfosson的问题表明他已经在指定视图。是的,但在您的示例中,即使调用MyOtherAction,它仍将查找MyAction视图。您需要执行
返回视图(“MyOtherAction”,新信息模型{…})如果您总是想呈现随它一起出现的视图。@tvanfosson啊,是的;我没有意识到我在我的例子中没有做同样的事情。我现在就把它修好。不,你不能(不应该)这么做。查看tvanfosson的答案,了解最简单的方法。他说他不希望URL改变。(我对MVC最大的失望是,它让人们对URL着迷,通常是毫无意义的。)也许局部视图可以在这里工作。@Ryan调用不同的操作方法,就像我的回答一样,不会改变URL。我不认为是MVC让人们沉迷于不改变URL;做一个服务器搜索。转移和看到很多网络表单痴迷,太。谢谢!只是一个小问题:@{Html.RenderAction(…);}在性能方面更好。它完全符合我的要求,没有想到这一点。