在匿名类型的属性名称中使用异常char(减号)

时间:2011-08-15 11:22:39

标签: c# asp.net-mvc anonymous-types

问题

我正在尝试声明一个名为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-前缀

替代

  • 在写这篇文章时,我注意到overload有一个IDictionary而不是一个对象。
  • 我可以手工写输入。
  • 我可以使用不同的前缀并忽略标准。 (啵!)

但如果有办法使用有趣的属性名称,我想学习它。

3 个答案:

答案 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
相关问题