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(…);}在性能方面更好。它完全符合我的要求,没有想到这一点。