ASP.NET MVC 4(测试版)中 HTML-5 data-* 属性的使用是不是中断?
Posted
技术标签:
【中文标题】ASP.NET MVC 4(测试版)中 HTML-5 data-* 属性的使用是不是中断?【英文标题】:Is usage of HTML-5 data-* attributes broken in ASP.NET MVC 4 (beta)?ASP.NET MVC 4(测试版)中 HTML-5 data-* 属性的使用是否中断? 【发布时间】:2012-03-24 12:25:26 【问题描述】:根据this question,我应该能够写出这样的东西:
@html.ActionLink( "Delete", "Delete", "Message", new data_id=id, @class="delete" )
或者作为一个快乐的 T4MVC 用户可以做的:
@Html.ActionLink( "Delete", MVC.Message.Actions.Delete(), new data_id=id, @class="delete" )
并在渲染过程中替换“data_id”中的下划线:
<a href="/message/delete" class="delete" data-id="42">Delete</a>
但是,这似乎不适用于 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));
更新 2 - 修复可用
David Ebbo 对the reported issue 的响应速度非常快,并且已经将上述修复合并到 T4MVC 中。
更新 3 - 修复问题
非常尴尬的是,提交的原始修复实际上并没有工作,因为它仍然称为无效重载。我现在修改了代码,使其与 MVC 内部所做的相同(使用他们的帮助方法),并通知 David 将其包含在 T4MVC 中。从codeplex 获取 2.6.70,或者在发布时使用 NuGet 进行更新,可能很快。
【问题讨论】:
我更喜欢直接写Delete..@Html.ActionLink()对 UI 不友好。 但 【参考方案1】:试试
@Html.ActionLink( "Delete", "Delete", "Message", null, new data_id=id, @class="delete" )
我认为由于所有重载,它假设您的第 4 个参数是 routeValues 参数。
【讨论】:
是的,我相信这是正确的答案。我的 MVC4 项目中有 data-* 属性,但多次被 ActionLink 重载绊倒 这是一个明智的建议,但我实际上使用的是一个接受 ActionResult 的 T4MVC 扩展,这对路由值没有重载(它都包含在 ActionResult 中)。因此,我确信我确实将变量传递给了 htmlAttributes 参数。更新了帖子以显示我如何真正使用它(只是不想将图片与 T4MVC 混淆)。 嘿,谁知道呢。你说的对。 T4MVC 必须在 MVC4 中调用错误的重载。谢谢! 我希望每次遇到这个问题都能得到一美元。在 MVC 框架中,actionlink/routelink 确实存在重载问题。以上是关于ASP.NET MVC 4(测试版)中 HTML-5 data-* 属性的使用是不是中断?的主要内容,如果未能解决你的问题,请参考以下文章