ASP.NET MVC4 ActionLink路由查询字符串问题

3

我有一个类似以下代码的操作:

 public class EmployerController : Controller
 {
 public ActionResult Message(string contractorId, int projectId)
 {....}

而一个 @html.ActionLink 作为

 @Html.ActionLink("Message", "Message", "Employer", new { contractorId = @model.ContractorId, projectId = @model.ProjectId }, null)

我最终得到了像这样的URL:

http://localhost:3597/Employer/Message?contractorId=contractor&projectId=10

我希望我的url像这样

http://localhost:3597/Employer/Message/contractor/10

在我的RouteConfig.cs文件中,我已经添加了以下内容:
 routes.MapRoute(
            name: "MessageRoute",
            url: "Employer/Message/{contractorId}/{projectId}",
            defaults: new { controller = "Employer", action = "Message", contractorId = (string)null, projectId = 0 }
       );

我缺少什么?如何在路由中禁用查询字符串?
感谢您的阅读。

我通过将自定义的routes.MapRoute方法放置在默认的routes.MapRoute方法之上来解决了这个问题。 - Dandy
2个回答

0
在您的RouteConfig.cs文件中,您只有上面帖子中提到的路由("MessageRoute")吗?还是您也有下面的默认路由?我怀疑您可能在"MessageRoute"之前注册了以下默认路由,这就是您看到此行为的原因。
routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

如果是的话,你应该翻转这些路由的注册顺序。

0

您可以通过路由 URL 来生成 URL,就像这样

<a href='@Url.RouteUrl("MessageRoute", new { contractorId = 6, projectId = 5})'>link</a>

和你的路由

 routes.MapRoute(
        name: "MessageRoute",
        url: "Employer/Message/{contractorId}/{projectId}",
        defaults: new { controller = "Employer", action = "Message", contractorId = UrlParameter.Optional, projectId = UrlParameter.Optional }
   );

适用于我的结果网址是

/Employer/Message/6/5 

如果你需要像 /Employer/Message/contraktor/6/project/5 这样的URL,只需更改路由即可。
        routes.MapRoute(
        name: "MessageRoute",
        url: "Employer/Message/contraktor/{contractorId}/project/{projectId}",
        defaults: new { controller = "Employer", action = "Message", contractorId = UrlParameter.Optional, projectId = UrlParameter.Optional }
   );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接