【发布时间】:2011-08-15 11:22:39
【问题描述】:
问题
我正在尝试使用名为 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 渐进增强来限制用户可以插入的字符数。
所以我在属性上使用了data- 前缀:http://ejohn.org/blog/html-5-data-attributes/
替代方案
- 在写这篇文章时,我注意到有一个 overload 接受一个 IDictionary 而不是一个对象。
- 我可以手写输入。
- 我可以使用不同的前缀而忽略标准。 (嘘!)
但是如果有办法使用有趣的属性名称,我想学习它。
【问题讨论】:
-
我认为你可以使用
DynamicObject来实现这一点,但它会增加不必要的开销。所以让我们等待大师。 -
这也是我的想法,但为什么会造成不必要的开销?
-
@sternr:因为不幸的是 .NET DLR 比“静态”定义的类慢得多。除此之外,在 C# 中使用 DLR 类(与习惯类相比)会付出更多努力。
-
我可能会遗漏一些东西,但是 C# 中的标识符根本不允许包含减号...
private int data-maxchars; // <- invalid -
@Daniel:这是 C# 的限制,但可能不是 .NET 运行时的限制。
标签: c# asp.net-mvc anonymous-types