在尝试应用ID时,Html.ActionLink助手创建了错误的链接

时间:2012-08-03 16:29:09

标签: asp.net-mvc-3 razor

尝试为通过Razor @ Html.ActionLink助手创建的[a]标签分配ID属性时,我得到一个奇怪的结果

我的原始代码是:

 @Html.ActionLink("Create New Order", "Index", "NewOrder")

这可以正常工作并创建一个http://www.mysite.com/NewOrder的链接,但我想为我的元素添加一个ID标记。

然后我尝试了这个

 @Html.ActionLink("Create New Order", "Index", "NewOrder", new {@id = "orderlink"})

这会创建http://www.mysite.com/Orders?Length=8

的链接

更新

当我使用提供的解决方案时,

@ Html.ActionLink(“创建新订单”,“索引”,“NewOrder”,新{@id =“orderlink”},null)

我得到一个如下所示的链接: http://www.mysite.com/NewOrder/Index/orderlink

我不希望将orderlink添加到我的链接/路由中。我想将它添加到[a]标签属性中。请参阅问题的顶部。

我想得到这个:

 <a id="orderlink" href="/tcap/NewOrder/Index" >Create New Order</a>

2 个答案:

答案 0 :(得分:6)

尝试this重载。

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    string controllerName,
    Object routeValues,
    Object htmlAttributes
)

所以你的代码将是

 @Html.ActionLink("Create New Order", "Index", "NewOrder", 
              new {@id = "orderlink"},null)

编辑:根据您的评论/更新的问题

使用this重载

 @Html.ActionLink("Create New Order", "Index", "NewOrder")

这将为您提供mysite.com/NewOrder/Index网址

EDIT2 : 如果您愿意,<a id="orderlink" href="/tcap/NewOrder/Index" >Create New Order</a>

使用此选项,将HTML属性作为this overload

的第五个参数传递
@Html.ActionLink("Create New Order", "Index", 
            "NewOrder",null,new {@id="orderlink"})

答案 1 :(得分:2)

前几天在这里回答了这个问题:

ASP.NET MVC basic routing with parameters

简而言之,将最后一个null参数添加到重载:

@Html.ActionLink("Create New Order", "Index", "NewOrder", 
                  new {@id = "orderlink"}, null)

在这种情况下,添加null作为最终参数(htmlAttributes)就是你所缺少的(Html.ActionLink有9次重载,所以很容易错过正确的实现)