我正在尝试在我的ASP.NET MVC1项目中使用HTML5 data- attributes。(我是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时,它可以工作,但我猜它需要按照规范以"data-“开头。
我的问题:
处理。
发布于 2010-03-26 09:27:45
更新:MVC3和更新版本对此有内置支持。有关推荐的解决方案,请参阅下面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" ) )%>
只是想法,还没有测试过。
发布于 2010-12-23 09:08:27
这个问题已经在HTMLMVC3中得到了解决,它们现在会自动将ASP.Net属性属性中的下划线转换为短划线。他们在这一点上很幸运,因为下划线在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的源代码中借用的静态方法来模仿MVC3正在做的事情:
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="" />
发布于 2012-06-06 16:14:23
它甚至比上面提到的所有东西都要简单。MVC中包含破折号(-)的数据属性是通过使用下划线(_)来处理的。
<%= Html.ActionLink("« Previous", "Search",
new { keyword = Model.Keyword, page = Model.currPage - 1},
new { @class = "prev", data_details = "Some Details" })%>
我看到JohnnyO已经提到了这一点。
https://stackoverflow.com/questions/2520487
复制相似问题