在ASP.NET MVC 4(beta)中是否破坏了HTML-5 data-*属性的使用?

Mor*_*ner 8 c# asp.net-mvc html5 asp.net-mvc-4

根据这个问题,我应该能够写出这样的东西:

@Html.ActionLink( "Delete", "Delete", "Message", new { data_id=id, @class="delete" } )
Run Code Online (Sandbox Code Playgroud)

或者作为一个快乐的T4MVC用户可以做到:

@Html.ActionLink( "Delete", MVC.Message.Actions.Delete(), new { data_id=id, @class="delete" } )
Run Code Online (Sandbox Code Playgroud)

并在渲染期间替换"data_id"中的下划线:

<a href="/message/delete" class="delete" data-id="42">Delete</a>
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不适用于MVC 4测试版.其他人看到这个问题?

这是故意改变,如果是,我该怎么办?

更新 - 如何修复(手动)

我已将以下更改应用于T4MVC.tt文件,该文件修复了生成的代码中的问题:

public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, ActionResult result, object htmlAttributes, string protocol = null, string hostName = null, string fragment = null) {
    //was: return ActionLink(htmlHelper, linkText, result, new RouteValueDictionary(htmlAttributes), protocol, hostName, fragment);
    return htmlHelper.RouteLink(linkText, null, protocol, hostName, fragment, result.GetRouteValueDictionary(), HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}
Run Code Online (Sandbox Code Playgroud)

更新2 - 可用

David Ebbo在回应报道的问题时迅速闪电,并已将上述修复程序合并到T4MVC中.

更新3 - 修复固定

相当令人尴尬的是,提交的原始修复确实不起作用,因为它仍称为无效重载.我现在已经修改了代码,就像内部使用MVC一样(使用他们的帮助方法),并通知David将它包含在T4MVC中.从codeplex获取2.6.70 或在发布时使用NuGet进行更新,可能很快就会发布.

Sta*_*anK 5

尝试

@Html.ActionLink( "Delete", "Delete", "Message", null, new { data_id=id, @class="delete" } )

我认为这是因为假设您的第4个参数是routeValues参数,所有重载都是如此.

  • 我希望每次遇到这个问题我都会得到一美元.在actionlink/routelink的MVC框架中存在明确的重载问题. (2认同)