【问题标题】:need help with mvc & routes在 mvc 和路由方面需要帮助
【发布时间】:2009-10-12 13:22:53
【问题描述】:

我对 MVC 非常陌生,我正在尝试使用它建立一个新站点。出于 SEO 的原因,我们需要将页面的 url 设置为“Recruiter/4359/John_Smith”或基本上是{controller}/{id}/{name}。当我像这样在后面的代码中创建 url 时,我有这个工作......

//r is a recruiter object that is part of the results for the view

r.Summary = searchResult.Summary + "... <a href=\"/Recruiter/" + r.Id + "/" + r.FirstName + "_" + r.LastName + "\">Read More</a>"

但是当我在我的视图中使用搜索结果的集合并遍历它们时,我试图创建另一个指向同一页面的链接,执行类似<%=Html.ActionLink<RecruiterController>(x => x.Detail((int)r.Id), r.RecruiterName)%> 的操作,但这不起作用。当我在视图中使用该代码时,它给了我一个 /Recruiter/Detail/4359 形式的 url,一位同事告诉我应该使用 Html.ActionLink 在视图和控制器中创建链接,以便如果将来路线发生变化,它将自动起作用。不幸的是,他不确定在这种情况下如何做到这一点。所以,我的问题是……

  1. 如何使 Html.ActionLink 在视图中工作以创建我需要的 url(如上面的 r.Summary)?
  2. 如何在控制器中使用 Html.ActionLink 而不是像上面那样对链接进行硬编码?

【问题讨论】:

    标签: model-view-controller actionlink


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      按照同事的说法,使用 ActionLink 方法写出链接是个好主意,这样它们将始终与您的路线匹配。

      在您当前的情况下,它写出该方法的原因是因为它基于默认路由。您可以通过在 Global.asax 中的默认路由之上添加另一条路由来解决此问题。你只需要像这样规定你想要的格式:

      routes.MapRoute(
          "Recruiter",
          "Recruiter/{id}/{name}",
          new { controller = "Recruiter", action = "Details" }
      );
      

      MVC 将按照它们注册的顺序处理您的路由,因此将其放在默认值之前将使其使用您的路由。

      编辑:

      您可能会发现这个route debugging tool 很有用。

      【讨论】:

      • 这基本上就是我现在所拥有的,但它不会生成 url。而且,如果它使用路由来生成 url,我怎样才能让它用下划线替换招聘者名称中的空格? routes.MapRoute( "Recruiter", // 路由名称 "Recruiter/{id}/{recruitername}", // 带参数的 URL new { controller = "Recruiter", action = "Detail" }, // 参数defaults new { id = @"\d{1,}" } // id 参数必须是数字 );
      • 对不起,我不知道为什么它没有正确格式化我的回复,但那里应该有一个新的代码段。我是 stackoverflow 的新手,常见问题解答说 标记已被识别,因此如果有人知道我做错了什么,请告诉我。谢谢。
      • 向您的招聘人员类添加一个名为 UrlName 之类的属性,它可以转义字符并将其用于您的路线,我已经这样做了,它工作正常
      猜你喜欢
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多