【问题标题】:MVC ActionLink generating different types of links... why?MVC ActionLink 生成不同类型的链接......为什么?
【发布时间】:2009-02-23 21:13:31
【问题描述】:

我是 MVC 领域的新手,我正在开发一个应用程序。我的全球有 2 条不同的链接,其中 2 条路线非常相似

路线 1

routes.MapRoute("Category", "Movies/{category}/{subcategory}", 
    new { controller = "Catalog", action = "Index", category = "", subcategory = "" });

路线 2

routes.MapRoute("Movie", "Movie/{movie}", 
    new { controller = "Movie", action = "Index", movie = "" });

当我为第一条路由调用 actionlink 时,它会按照我的想法创建它:

.../Movies/Category/SubCategory

但是,当我创建第二个链接时,它会像这样填充它:

.../Movie?movieId=ff569575-08ec-4049-93e2-901e7b0cb96a

我之前使用的是字符串而不是 guid,但它仍然在做同样的事情,即

.../Movie?movieName=Snatch

我的actionlinks设置如下

<%= Html.ActionLink(parent.Name, "Index", "Catalog",
    new { category = parent.Name, subCategory = "" }, null)%>

<%= Html.ActionLink(movie.Name, "Index", "Movie", 
    new { movieId = movie.MovieId }, null)%>

我的应用程序仍然有效,但我认为这种行为很奇怪。任何帮助都会很棒。

谢谢!

【问题讨论】:

    标签: c# asp.net-mvc actionlink


    【解决方案1】:
    routes.MapRoute("Movie", "Movie/{movieId}", 
        new { controller = "Movie", action = "Index", movie = "" });
    

    路由文本是否应该与您提交到 mvc 链接的属性名称不匹配?

    【讨论】:

    • 你说得对,他们需要匹配,但他可能希望更改对 ActionLink/RouteLink 的调用,而不是更改路由。
    • 谢谢大家。我能够通过删除冲突的名称来修复它。
    【解决方案2】:

    问题是当你调用 ActionLink 时,路由系统无法确定要使用两个路由中的哪一个,所以它选择了第一个。解决方案是使用 RouteLink 而不是 ActionLink。 RouteLink 允许您在生成 URI 时指定要使用的路由名称。那么对于使用哪条路线就没有歧义了。我认为 ActionLink 已经过时了。我想不出任何理由用它来代替 RouteLink。

    但是,当用户提交链接时,您可能仍然会遇到问题。在这种情况下,使用路由约束来强制选择正确的路由。

    Andrew 是正确的(赞成)你在 ActionLink/RouteLink 中使用的令牌和路由本身必须匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2013-01-19
      • 2014-04-25
      相关资源
      最近更新 更多