【问题标题】:Define Custom View From Controller从控制器定义自定义视图
【发布时间】:2016-09-27 03:17:27
【问题描述】:

这些天我一直在探索 ASP.NET MVC 5 并陷入了一些基础知识。例如,我们创建了名为“HomeController”的控制器,在这方面,在“Home”中创建了一个名为“Index”的视图文件夹。现在假设我们在 'Home' 文件夹中创建另一个名为 'Data' 的文件夹,并且它又有一个名为 '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,因为它位于“Home”文件夹下。还有一件事 - 当我右键单击“ViewData()”以匹配视图时,它显示“无法找到匹配的视图”。我该如何解决?只是为了澄清是否可能。

所以下面是文件夹结构:

Views/Home/Data/ViewData.cshtml

在控制器中,如下:

控制器/HomeController.cs

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

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

    1. 在Visual Studio中右键解决方案->添加->区域
    2. 称之为家
    3. 进入Home区域的Controllers文件夹->右键->添加->Controller
    4. 称它为 DataController
    5. 最后在 DataController 中创建一个名为 ViewNoData 的操作

    现在您可以像这样访问它 - 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 }
    ); 
    

    【讨论】:

    • 感谢您的回复。可以不使用 Areas 文件夹来完成吗?我的意思是通常我们使用 ASP.NET MVC 中的默认文件夹结构来完成?
    • 在文件中,我现在遵循路由结构,因为我已经使用了默认文件夹结构:routes.MapRoute( name: "Default", url: "{controller}/{ action}/{id}",默认值:new { controller = "Home", action = "Index", id = UrlParameter.Optional });那么它会产生任何冲突吗?
    • Home/{controller}/{action}/{id}?那是你有的吗?那么它应该可以工作。如果没有,那么该路由和其他路由之间存在冲突。然后你必须使用区域
    • 好的。如果我创建区域文件夹,我可以从默认文件夹中的文件为新文件夹区域创建操作链接,如下所示:

      @Html.ActionLink("Click Here To Proceed", "Home/Data/ViewNoData")

    • 是的,您可以,但是您必须通过区域名称传递一个额外的参数。您可以通过谷歌搜索此示例。如果对您有帮助,请记住将我的答案标记为正确
    猜你喜欢
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2021-05-24
    相关资源
    最近更新 更多