【问题标题】:RouteLink empty HrefRouteLink 空 Href
【发布时间】:2011-07-02 16:05:06
【问题描述】:

我将 MVC3 与 Razor 视图引擎一起使用。我想为 Href 使用某个 Route

以下是路由注册,(路由好像可以用浏览器直接使用)

routes.MapRoute(
    "AddItem",
    "{listAreaName}/{listSlug}/Add",
    new { controller = "List", action = "AddItem" }
    );

但 @Html.RouteLink 不起作用。它为链接返回一个空的href

这是我的一些尝试

@Html.RouteLink("Add New Item", "AddItem", new { controller="List", action="AddItem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item1", "AddItem", new { controller = "List", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item2", "AddItem", new { action = "AddItem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item3", "AddItem", new { controller = "list", action = "additem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item4", "additem", new { controller = "List", action = "AddItem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />

@Html.RouteLink("Add New Item5", "additem", new { listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />
@Html.RouteLink("Add New Item6", "AddItem", new { controller = "ListController", action = "AddItem", listAreaName = Model.ListAreaName, listSlug = Model.Slug })<br />

如果我错过了路线名称,它会生成有效链接,但格式不正确

我找到的大部分材料都是针对 v1 的预览版。这个问题解决了吗?

有什么想法吗?

【问题讨论】:

  • 我遇到了同样的问题。你有想过这个吗?
  • 在您传递的一个对象中寻找一个空值。这将彻底改变路线。我通过新建一个香草项目并在路线图中复制来解决我的问题,(d)一一启用。

标签: asp.net-mvc-3 routelink


【解决方案1】:

在最后一个路由链接中你有错误,你不应该使用Controller后缀:

@Html.RouteLink(
    "Add New Item6", 
    "AddItem", 
    new { 
        controller = "List", 
        action = "AddItem", 
        listAreaName = Model.ListAreaName, 
        listSlug = Model.Slug 
    }
)

就其他人而言,他们都生成以下 url:/ListAreaName/Slug/Add in ASP.NET MVC 3 RTM 假设您已设置默认路由并且您已添加问题中显示的路由。

【讨论】:

  • 心灰意冷,开始尝试任何组合以使其发挥作用
  • 注册了许多路由,包括默认路由。如果我删除路由的名称,它会使用默认路由。
【解决方案2】:

编辑

您的路由中只有一个元素可以省略默认值。您没有 listAreaName 或 listSlug 的默认值。看到这个问题:asp mvc routing with two optional parameters

routes.MapRoute(
    "AddItem",
    "{listAreaName}/{listSlug}/Add",
    new
    {
        controller = "List",
        action = "AddItem",
        listAreaName = "foo", // <-- add these
        listSlug = UrlParameter.Optional
    });

原创

您的路线实际上并不包含控制器和操作参数。您是否尝试过从路由值中省略它们(在请求中对路由进行解码时会推断出它们)。我要做的另一件事是确保模型实际上包含 ListAreaNameSlug 值。

@Html.RouteLink("Add New Item",
                "AddItem",
                new
                {
                     listAreaName = Model.ListAreaName,
                     listSlug = Model.Slug 
                })<br />

此外,如果可能的话,您确实应该使用 CSS 将这些样式设置为块级元素,而不是在其后添加 &lt;br/&gt;

<style>
   .block { display: block; }
</style>

@Html.RouteLink("Add New Item",
                "AddItem",
                new
                {
                     listAreaName = Model.ListAreaName,
                     listSlug = Model.Slug 
                },
                new { @class = "block" })

【讨论】:

  • 试过“添加新项目5”。我还删除了 htmlAttributes(css 所在的位置)以简化情况
  • @dbones - 我之前错过了它,但是您在路线中有两个可选元素。那是行不通的。您需要更新您的路线以为其中之一提供默认值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多