【问题标题】:ASP.NET MVC4 ActionLink Routes querystring issueASP.NET MVC4 ActionLink Routes 查询字符串问题
【发布时间】:2013-06-07 21:11:06
【问题描述】:

我有一个动作

 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)

我最终得到了类似的网址

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

而我想要像这样的网址

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 方法之上解决了这个问题。

标签: asp.net-mvc-4 routes html.actionlink


【解决方案1】:

在您的 RouteConfig.cs 中,您是否只有上面在帖子中提到的路由(“MessageRoute”),或者您也有默认路由(如下)?我怀疑您可能在“MessageRoute”之前注册了以下默认路由,这就是您看到这种行为的原因。

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

如果是,你应该颠倒这些路线的注册顺序。

【讨论】:

    【解决方案2】:

    你可以像这样通过路由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 这样的网址,只需将路由更改为

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-28
      • 2012-09-21
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多