Используйте исключительный char (минус) в имени свойства анонимного типа
Проблема
Я пытаюсь объявить анонимный тип с свойством с именем 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/
Альтернативы
- При написании этого я заметил, что существует перегрузка, в которой вместо ID объекта используется IDictionary.
- Я могу написать ввод вручную.
- Я мог бы использовать другой префикс и игнорировать стандарты. (Boo!)
Но если есть способ использовать смешное имя свойства, я хотел бы изучить его.
Ответы
Ответ 1
Начиная с ASP.NET MVC 3, вы можете использовать символ подчеркивания (_
), он будет автоматически заменен на -
для генерации HTML. Магия выполняется в HtmlHelper.AnonymousObjectToHtmlAttributes
.
Например: new { data_abc = "def" }
будет сгенерирован как data-abc="def"
.
Ответ 2
Это невозможно вообще, если вы не генерируете свои собственные классы через Reflection.Emit. Но для этого вам все равно придется пройти какой-то "словарь", чтобы вы могли пойти на это.
Использование инициализаторов коллекции С# 3 должно сделать его намного лучше.
Ответ 3
Я могу что-то пропустить, но идентификаторы на С# просто не могут содержать минус...
private int data-maxchars; // <- invalid