如何在ASP.NET MVC中使用路由配置中的连字符替换%20

Nur*_*ihu 1 c# asp.net-mvc routing asp.net-mvc-4

我需要指导从我的网址中删除Modulos标志.我希望我的路由完全如下所示.

stackoverflow.com/questions/15881575/get-the-selected-value-of-a-dropdownlist-asp-net-mvc

我的路由返回了一些东

stackoverflow.com/questions/15881575/get%20the%20selected%20value%20of%20a%20dropdownlist-asp-net-mvc.

注意%20返回.请问如何取代连字符?

下面是我的路由配置.

  routes.MapRoute(
          name: null,
          url: "{controller}/{action}/{id}/{title}",
          defaults: new
          {
              controller = "Home",
              action = "Index",
              title=UrlParameter.Optional,
              id = UrlParameter.Optional
          }
          );
Run Code Online (Sandbox Code Playgroud)

Title是我的action方法中的字符串参数.我想这样做:

routes.MapRoute(
          name: null,
          url: "{controller}/{action}/{id}/{title}",
          defaults: new
          {
              controller = "Home",
              action = "Index",
              title=UrlParameter.Optional.ToString().Replace(' ','-'),
              id = UrlParameter.Optional
          }
          );
Run Code Online (Sandbox Code Playgroud)

然而它失败了.我或者尝试过

 title=UrlParameter.Optional.ToString().Replace("%20","-"),
Run Code Online (Sandbox Code Playgroud)

它也失败了.我是新手,并试图让它变得更好.请任何帮助将不胜感激.

Ric*_*ard 6

%20是空间的URL编码版本.您无法使用路由定义解决此问题,您必须首先修改生成链接的代码,以便删除空格.

例如,如果您当前正在使用以下方式生成链接:

@Html.ActionLink(item.Title, "Details", new { 
    id = item.Id, 
    title = item.Title 
})
Run Code Online (Sandbox Code Playgroud)

你会把它改成

@Html.ActionLink(item.Title, "Details", new {
    id = item.Id,
    title = item.Title.Replace(" ", "-")
})
Run Code Online (Sandbox Code Playgroud)

请注意,您可能需要处理除空格之外的其他字符,因此您可能最好使用:

title = Regex.Replace(item.Title, "[^A-Za-z0-9]", "")
Run Code Online (Sandbox Code Playgroud)