我正在尝试声明一个名为data-maxchars
的属性的匿名类型。
因为减号是运算符,它会将我想要的属性名称降级(?)到一个操作中,并且出现编译错误:Invalid anonymous type member declarator.
我知道我可以使用@来逃避保留字,但我无法弄清楚是否有办法逃避减号。
object attributes = (object)new { @class = "foo" } // OK
匿名类型作为object
参数传递给TextAreaExtensions.TextArea:<%= Html.TextArea(Model.Field.Id, val, rows, cols, attributes)%>
。这会生成带有传递属性的输入。
我想使用JS渐进增强来限制用户可以插入的字符数 所以我在我的属性http://ejohn.org/blog/html-5-data-attributes/
上使用了data-
前缀
但如果有办法使用有趣的属性名称,我想学习它。
答案 0 :(得分:23)
从ASP.NET MVC 3开始,您可以使用下划线(_
),它将自动替换为-
以生成HTML。魔术在HtmlHelper.AnonymousObjectToHtmlAttributes
完成。
例如:new { data_abc = "def" }
将生成为data-abc="def"
。
答案 1 :(得分:4)
这根本不可能,除非你通过Reflection.Emit生成自己的类。但是你仍然需要为此通过一些“字典”,所以你不妨这样做。
使用C#3集合初始化程序应该让它看起来好多了。
答案 2 :(得分:1)
我可能会错过一些东西,但C#中的标识符根本不允许包含减号...
private int data-maxchars; // <- invalid