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-* 属性的使用是不是中断?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 4 (一)路径映射

ASP.NET MVC 4 模型验证

跟我一起学习ASP.NET 4.5 MVC4.0

ASP.NET MVC 4 的 Windows 身份验证 - 它是如何工作的,如何测试它

解读ASP.NET 5 & MVC6系列

跟我一起学习ASP.NET 4.5 MVC4.0