【问题标题】:Calling another different view from the controller using ASP.NET MVC 4使用 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),并且我已经更改了我的目录结构,因为这是问题所在。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    您可以直接返回不同的视图,例如:

    return View("NameOfView", Model);
    

    或者你可以做一个局部视图并且可以返回如下:

    return PartialView("PartialViewName", Model);
    

    【讨论】:

    • 一个错误被引发,因为动作在一个控制器中,它的视图在 \Views\Test 下
    • 我已经修改了我的目录结构。这就是问题所在。现在你的解决方案就像一个魅力。非常感谢!正如您首先回答的那样,我接受的解决方案是您的。
    • 我在 VS2013 中的智能感知并没有采用这种方法,即使它看起来应该存在,所以这很棒。谢谢。即使我尝试了它,直到我看到您的答案并输入了整个内容,它也没有收到它。谢谢。
    【解决方案2】:

    要返回不同的视图,可以指定要返回的视图的namemodel,如下所示:

    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。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-05
          • 1970-01-01
          • 1970-01-01
          • 2014-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多