从Controller定义自定义视图

时间:2016-05-29 04:40:27

标签: asp.net-mvc

这些天我一直在探索ASP.NET MVC 5,并深入了解一些基础知识。例如,我们创建名为“ HomeController ”的控制器,在这方面,在“主页”中创建一个名为“索引”的视图夹。现在假设我们在名为“数据”的“主页”文件夹中创建了另一个文件夹,并且它还有一个名为“ ViewData ”的视图。在'HomeController'中,我有一个名为' ViewData '的方法如下(我希望这个方法被引用到视图' ViewData '):

public ActionResult ViewData()
{  
   MainDbContext db = new MainDbContext();
   var con = (from c in db.Lists
              where c. Public == "No"
              select c). ToList();
   return View("Data/ViewData", con);
}

当我运行项目时,它按预期工作我的意思是给我输出,URL如下所示:http://localhost:2361/Home/ViewNoData

但我希望这样显示:http://localhost:2361/Home/Data/ViewNoData因为它位于“主页”文件夹下。还有一件事 - 当我右键点击“ViewData()”以匹配视图时,它会显示“无法找到匹配的视图”。我怎么解决它?只是为了澄清是否有可能。

以下是文件夹结构:

查看/主页/数据/ ViewData.cshtml

在控制器中,如下:

控制器/ HomeController.cs

1 个答案:

答案 0 :(得分:0)

您可以使用ASP.NET MVC Areas来实现此目标:

  1. 右键单击Visual Studio中的解决方案 - >添加 - >区域
  2. 称之为主页
  3. 转到主页区域中的Controllers文件夹 - >右键单击 - >添加 - >控制器
  4. 将其命名为DataController
  5. 最后在DataController
  6. 中创建一个名为ViewNoData的动作

    Areas in MVC

    现在您可以像这样访问它 - http://localhost:51118/Home/Data/ViewNoData

    如果由于某种原因你不想使用区域,你可以在RouteConfig.cs中调整路由

    routes.MapRoute(
        name: "Default",
        url: "Home/{controller}/{action}/{id}",
        defaults: new { controller = "Data", action = "ViewNoData", id = UrlParameter.Optional }
    );