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

标签 c# asp.net-mvc asp.net-mvc-4 routes

我需要指导来从我的网址中删除模数符号。我希望我的路由完全如下所示。

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
          }
          );

标题是我的操作方法中的一个字符串参数。我想这样做:

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

然而它失败了。我也试过

 title=UrlParameter.Optional.ToString().Replace("%20","-"),

它也失败了。我对此很陌生,并试图让它变得更好。请提供任何帮助。

最佳答案

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

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

@Html.ActionLink(item.Title, "Details", new { 
    id = item.Id, 
    title = item.Title 
})

你会把它改成

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

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

title = Regex.Replace(item.Title, "[^A-Za-z0-9]", "")

关于c# - 如何用 ASP.NET MVC 中的路由配置中的连字符替换 %20,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28721818/

相关文章:

c# - 将域模型子计数投影到 View 模型上,无需额外查询

c# - 这是 MVC 框架中的错误吗

c# datatable - 从数据表中有效地为每个主记录选择详细记录

c# - Win10 UWP、Prism/Unity 和单元测试以及类库、静默失败

c# - 从客户端调用 MVC Web API Controller 方法

c# - NHibernate - 使用 ICriteria 加入子查询

c# - 在没有azure的IIS服务器上发布MVC 5

c# - 如何从 NopCommerce v3.5 的设置表加载记录

c# - 使用当前用户 ID 初始化 ASP.NET MVC Controller

javascript - 获取每个表单部分的 id 和值