首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特定操作的路由在操作前添加“Home”

特定操作的路由在操作前添加“Home”
EN

Stack Overflow用户
提问于 2015-07-15 17:06:41
回答 2查看 124关注 0票数 0

在一个基本的ASP/MVC项目中,我遇到了一个奇怪的路由问题。

我已经设置了一堆导航项目:

代码语言:javascript
复制
<li><a href="@Url.Action("index", "home")">Home</a></li>
<li><a href="@Url.Action("fire", "home")">Fire</a></li>
<li><a href="@Url.Action("law-enforcement", "home")">Law Enforcement</a></li>
<li><a href="@Url.Action("forensics", "home")">Forensics</a></li>
<li><a href="@Url.Action("reconstruction", "home")">Reconstruction</a></li>

它们都很好,除了第三个标记为law-enforcement的。

当我鼠标移动这个项目时,网址是:http://localhost:54003/home/law-enforcement

当我鼠标移动到任何其他项目时,URl是:http://localhost:54003/fire

我的控制器设置是:

代码语言:javascript
复制
public ActionResult Index()
{
    return View();
}

[Route("~/fire")]
public ActionResult Fire()
{
    return View();
}

[Route("~/law-enforcement")]
public ActionResult Law()
{
    return View();
}

[Route("~/forensics")]
public ActionResult Forensics()
{
    return View();
}

[Route("~/reconstruction")]
public ActionResult Reconstruction()
{
    return View();
}

我的路由配置是:

代码语言:javascript
复制
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.LowercaseUrls = true;
    routes.MapMvcAttributeRoutes();

    routes.MapRoute("Default", "{controller}/{action}/{id}",
        new {controller = "Home", action = "Index", id = UrlParameter.Optional}
        );
}

当我转到URL指定的路由时,ASP会用一个404页进行响应(这是应该找到的)。如果我走到我知道应该是的路由,比如localhost/law-enforcement,那么就会呈现正确的视图。

您知道ASP为什么不正确地路由这个特定的操作吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-16 03:50:50

您可以按以下两种方式中的任何一种方式保持url映射:

一种方法是用属性装饰actionresult,如下所示:

代码语言:javascript
复制
// eg: /home/show-options
[Route("law-enforcement")] //Remove ~
public ActionResult Law() 
{
    return View();
}

根据文档

否则

只需在Route.config文件中再添加一个配置即可

代码语言:javascript
复制
routes.MapRoute("SpecialRoute", "{controller}/{action}-{name}/{id}",
        new {controller = "Home", action = "law-enforcement", id = UrlParameter.Optional}
 );

来源

票数 1
EN

Stack Overflow用户

发布于 2015-07-15 17:14:11

Razor Url.Action(...)不能引用[RouteAttribute]在控制器操作上定义的路由;相反,它需要引用操作的名称。因此,更改Razor语法以引用@Url.Action("law", "home")而不是@Url.Action("law-enforcement", "home")解决了这个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31436719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档