【问题标题】:Routing with Dashes in ASP.NET MVC在 ASP.NET MVC 中使用破折号进行路由
【发布时间】:2014-09-17 21:07:42
【问题描述】:

我正在使用 ASP.NET MVC 5 开发一个应用程序。我希望我的应用程序具有如下所示的路由:

http://www.myserver.com/my-category

请注意路线中的破折号 (-)。我目前有一个名为 MyCategoryController 的控制器。它是这样定义的:

namespace MyApp.Controllers
{
    [RoutePrefix("my-category")]
    public class MyCategoryController : Controller
    {
        // GET: List
        public ActionResult Index()
        {
            return View();
        }
    }
}

视图位于/Views/My-Category/Index.cshtml。当我尝试在浏览器中访问 http://www.myserver.com/my-category 时,我收到一条错误消息:

找不到资源。

我设置了一个断点,我注意到断点没有命中。然后我在浏览器中输入http://www.myserver.com/mycategory,我收到一条错误消息:

未找到视图“索引”或其主视图,或者没有视图引擎支持搜索到的位置。搜索了以下位置:

~/Views/mycategory/Index.cshtml
~/Views/mycategory/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml

如何设置我的 ASP.NET MVC 以便
a) 我可以访问http://www.myserver.com/my-category
b) 从/Views/my-category/Index.cshtml加载视图

【问题讨论】:

  • 为什么没有破折号的名为“MyCategory”的目录?
  • 确实,你为什么在乎文件夹名称是存储视图的位置。
  • 如果文件夹与路由不匹配真的让您感到困扰,请使用下划线

标签: c# asp.net-mvc


【解决方案1】:

您需要将视图文件夹命名为控制器而不是路由。

所以/Views/MyCategory/Index.cshtml 而不是/Views/My-Category/Index.cshtml

如果您出于某种我无法想象的原因希望它是/Views/My-Category/Index.cshtml,您需要“完全限定视图”:

return View("~/Views/My-Category/Index.cshtml");

关于带有破折号的路由:我没有使用基于属性的路由,所以我只能猜测:
您是否在 RegisterRoutes 方法中添加了 routes.MapMvcAttributeRoutes();
因为http://www.myserver.com/mycategory是默认路由的"{controller}/{action}/{id}"路由...

【讨论】:

  • 我实际上会推荐下划线
  • @ScottSelby:我根本不会推荐它,但如果 OP“真的想要”我想展示它是如何做到的......
  • 大声笑 - 我的意思是,假设他甚至提出了一个问题,他坚持不省略“-”,所以我说如果是这样的话,那么我会推荐下划线,因为它是允许的
猜你喜欢
  • 1970-01-01
  • 2014-06-26
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
相关资源
最近更新 更多