如何在HTML中使用破折号
我正在尝试在ASP.NET MVC 1项目中使用HTML5数据属性。 (我是一个C#和ASP.NET MVC新手。)
<%= Html.ActionLink("« Previous", "Search",
new { keyword = Model.Keyword, page = Model.currPage - 1},
new { @class = "prev", data-details = "Some Details" })%>
上述htmlAttributes中的“data-details”给出了以下错误:
CS0746: Invalid anonymous type member declarator. Anonymous type members
must be declared with a member assignment, simple name or member access.
它适用于我使用data_details时,但我想它需要按照规范开始“数据 - ”。
我的问题:
更新:MVC 3和更新版本内置了对此的支持。 有关推荐的解决方案,请参阅下面JohnnyO高度赞成的答案。
我不认为有实现这一目标的直接帮助者,但我有两个想法可供您尝试:
// 1: pass dictionary instead of anonymous object
<%= Html.ActionLink( "back", "Search",
new { keyword = Model.Keyword, page = Model.currPage - 1},
new Dictionary<string,Object> { {"class","prev"}, {"data-details","yada"} } )%>
// 2: pass custom type decorated with descriptor attributes
public class CustomArgs
{
public CustomArgs( string className, string dataDetails ) { ... }
[DisplayName("class")]
public string Class { get; set; }
[DisplayName("data-details")]
public string DataDetails { get; set; }
}
<%= Html.ActionLink( "back", "Search",
new { keyword = Model.Keyword, page = Model.currPage - 1},
new CustomArgs( "prev", "yada" ) )%>
只是想法,没有测试过它。
这个问题已经在ASP.Net MVC 3中解决了。他们现在自动将html属性中的下划线转换为破折号。 他们很幸运,因为下划线在html属性中是不合法的,所以MVC可以自信地暗示当你使用下划线时你会喜欢破折号。
例如:
@Html.TextBoxFor(vm => vm.City, new { data_bind = "foo" })
将在MVC 3中进行渲染:
<input data-bind="foo" id="City" name="City" type="text" value="" />
如果您仍在使用较旧版本的MVC,那么您可以通过创建从MVC3的源代码中借用的静态方法来模仿MVC 3所做的工作:
public class Foo {
public static RouteValueDictionary AnonymousObjectToHtmlAttributes(object htmlAttributes) {
RouteValueDictionary result = new RouteValueDictionary();
if (htmlAttributes != null) {
foreach (System.ComponentModel.PropertyDescriptor property in System.ComponentModel.TypeDescriptor.GetProperties(htmlAttributes)) {
result.Add(property.Name.Replace('_', '-'), property.GetValue(htmlAttributes));
}
}
return result;
}
}
然后你可以像这样使用它:
<%: Html.TextBoxFor(vm => vm.City, Foo.AnonymousObjectToHtmlAttributes(new { data_bind = "foo" })) %>
这将会呈现正确的data-*属性:
<input data-bind="foo" id="City" name="City" type="text" value="" />
它比上面提到的一切都更容易。 包含破折号( - )的MVC中的数据属性通过使用下划线(_)来满足。
<%= Html.ActionLink("« Previous", "Search",
new { keyword = Model.Keyword, page = Model.currPage - 1},
new { @class = "prev", data_details = "Some Details" })%>
我看到约翰尼已经提到这一点。
链接地址: http://www.djcxy.com/p/23357.html上一篇: How to use dashes in HTML
下一篇: Get ControllerName and ActionName and populate the ViewData in Master Page?