使用 ASP.NET MVC 4 从控制器调用另一个不同的视图
Posted
技术标签:
【中文标题】使用 ASP.NET MVC 4 从控制器调用另一个不同的视图【英文标题】:Calling another different view from the controller using ASP.NET MVC 4 【发布时间】:2013-09-25 11:21:51 【问题描述】:我有一个带有提交按钮的视图 (Index.cshtml)。单击提交按钮时,它会在控制器 (TestController.cs) 中调用一个操作 (Action01),因此在操作结束时,我想以自定义视图模型作为参数返回调用者 (Index.cshtml) 视图.我该怎么做?
第一次尝试使用 View("ViewName",model) 后的结果:
引发错误,因为该操作在控制器 Test 内,因此返回时,它正在搜索 \Views\Tests\Index,而我的索引页面位于 \Views\Home\Index 中。
未找到视图“索引”或其主视图,或者没有视图引擎支持搜索到的位置。搜索了以下位置:
~/Views/Test/Index.aspx
~/Views/Test/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/Test/Index.cshtml
~/Views/Test/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml
最终解决方案:
我使用了return View("ViewName", model)
,并且我已经更改了我的目录结构,因为这是问题所在。
【问题讨论】:
【参考方案1】:您可以直接返回不同的视图,例如:
return View("NameOfView", Model);
或者你可以做一个局部视图并且可以返回如下:
return PartialView("PartialViewName", Model);
【讨论】:
一个错误被引发,因为动作在一个控制器中,它的视图在 \Views\Test 下 我已经修改了我的目录结构。这就是问题所在。现在你的解决方案就像一个魅力。非常感谢!正如您首先回答的那样,我接受的解决方案是您的。 我在 VS2013 中的智能感知并没有采用这种方法,即使它看起来应该存在,所以这很棒。谢谢。即使我尝试了它,直到我看到您的答案并输入了整个内容,它也没有收到它。谢谢。【参考方案2】:要返回不同的视图,可以指定要返回的视图的name
和model
,如下所示:
return View("ViewName", yourModel);
如果视图位于 Views 文件夹下的不同文件夹中,则使用以下绝对路径:
return View("~/Views/FolderName/ViewName.aspx");
【讨论】:
您必须使用绝对路径才能从不同的文件夹返回视图。查看更新代码。【参考方案3】: public ActionResult Index()
return View();
public ActionResult Test(string Name)
return RedirectToAction("Index");
Return View
直接显示你的view
但是
Redirect ToAction
已执行操作
【讨论】:
【参考方案4】:您必须在 Controller Action 方法中指定自定义视图的名称及其相关模型。
public ActionResult About()
return View("NameOfViewYouWantToReturn",Model);
【讨论】:
【参考方案5】:另外,您可以只设置 ViewName:
return View("ViewName");
完整的控制器示例:
public ActionResult SomeAction()
if (condition)
return View("CustomView");
else
return View();
这适用于 MVC 5。
【讨论】:
以上是关于使用 ASP.NET MVC 4 从控制器调用另一个不同的视图的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET MVC 中:从 Razor 视图调用控制器操作方法的所有可能方式