ASP.NET MVC路由问题 - 视图'营销'或者找不到它的主人,或者没有视图引擎支持搜索到的位置

时间:2015-04-16 16:26:34

标签: asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing

我很确定我只是错过了一些明显的东西,但这就是发生的事情。

我在RouteConfig.cs文件中添加了一个自定义路由,如下所示:

routes.MapRoute(
    name: "LibraryCategoryList",
    url: "Library/List/{id}",
    defaults: new { controller = "Library", action = "List", id = "Marketing" }
);
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new[] { "BFRDP.Controllers" }
);

我有一个名为Library的控制器,带有一个动作List,如下所示:

public ActionResult List(string id)
{
    return View(id);
}

我的列表视图位于〜/ Views / Library / List.cshtml。

当我尝试转到http://localhost:49591/Library/List/Marketing时,我收到错误:

  

未找到“营销”视图或其主视图或视图引擎不支持搜索的位置。搜索了以下位置:〜/ Views / Library / Marketing.aspx~ / Views / Library / Marketing.ascx~ / Views / Shared / Marketing.aspx~ / Views / Shared / Marketing.ascx~ / Views / Library / Marketing。 cshtml~ / Views / Library / Marketing.vbhtml~ / Views / Shared / Marketing.cshtml~ / Views / Shared / Marketing.vbhtml

(是的,我确实有RouteConfig.RegisterRoutes(RouteTable.Routes);在我的global.asax.cs文件的Application_Start方法中。)

世界上我做错了什么?

谢谢!

劳里

1 个答案:

答案 0 :(得分:2)

框架将url与定义的第一个路径匹配,即LibraryCategoryList。根据这条路线,id参数等于" Marketing"。因此,在您的action方法中,return语句变为等效于:

return ("Marketing");

采用这种格式"营销"成为要返回的视图的名称。框架将在Library文件夹中查找具有此名称(Marketing.cshtml)的视图,而不是在视图下的共享文件夹中查找。如果找不到,则会给出错误。因此,要么在Library文件夹下定义Marketing视图,要么返回另一个视图或将代码更改为:

return ("List");