是否可以在匿名类的成员名称中使用短划线( - )?我主要感兴趣的是使用asp.net mvc将自定义属性传递给html-helpers,因为我希望我的html传递html5验证,这从数据开始 - 。
例如,这不起作用:
<%=Html.TextBoxFor(x => x.Something, new {data-animal = "pony"})%>
在成员名称前加上@也不起作用。
更新:如果这是不可能的,是否有推荐的方式来达到我的目的?我目前的临时解决方案是添加一个替换整个这样的东西:
<%=Html.TextBoxFor(x => x.Something, new {data___animal = "pony"}).Replace("___", "-")%>
但是这很糟糕,因为它很丑陋并且会在Model.Something
包含三个下划线时中断。 Buhu。
答案 0 :(得分:25)
在搜索同样的问题时刚发现这篇文章。
我找到了这个链接: http://blogs.planetcloud.co.uk/mygreatdiscovery/post/Using-custom-data-attributes-in-ASPNET-MVC.aspx
它解决了这个问题。它提到了以下内容:
[...]或更好,只需使用ASP.NET MVC源代码:
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;
}
答案 1 :(得分:13)
收集Asp-Mvc版本特定的数据处理方法 -
MVC 3+:使用下划线_并将自动替换为mvc
MVC 1?,2:请参阅@ Jean-Francois的答案,该答案指向this
答案 2 :(得分:2)
不,因为破折号是C#操作符(minus),并且空格不重要。
目前,编译器认为您试图从animal
中减去data
,除非为相关类型指定了-
运算符,否则这不起作用。
答案 3 :(得分:1)
无法使用 - 作为任何标识符的一部分。 http://msdn.microsoft.com/en-us/library/aa664670(VS.71).aspx
答案 4 :(得分:0)
不,你不能使用连字符。您需要使用字母数字字符,下划线或描述here的其他字符。 '-'
被视为减号。 data-animal
将被视为与data - animal
相同,因此除非您单独定义data
和animal
,否则甚至不会编译(如果您有data\u2014animal
和data\u2014\u2014animal
,它可能会出现细微的错误!)。
编辑:使用C#具有Unicode转义序列标识符的功能,您可以在标识符名称中获得破折号的效果。 “&amp; mdash”(较长的短划线字符)的转义序列为"U+2014"。因此,您将数据动物表达为{{1}}。但从编码风格的角度来看,我不确定为什么你不会选择更方便的命名约定。
另外,要点“2.4.2标识符(C#)”中的另一个要点:您不能在标识符中背对背地使用其中两个转义序列(例如{{1}})。