Ответ 1
Невозможно использовать - как часть любого идентификатора. http://msdn.microsoft.com/en-us/library/aa664670(VS.71).aspx
Можно ли использовать тире (-) в имени участника анонимного класса? Мне в основном интересно это использовать с asp.net mvc для передачи пользовательских атрибутов html-помощникам, так как я хочу, чтобы мой html передавал html5-валидацию, начиная с данных -.
Пример: не работает:
<%=Html.TextBoxFor(x => x.Something, new {data-animal = "pony"})%>
Помещение @перед именем члена также не делает трюк.
Обновление: если это невозможно, есть ли рекомендуемый способ сделать то, что я хочу? Мое текущее временное решение состоит в том, чтобы добавить замену всему этому:
<%=Html.TextBoxFor(x => x.Something, new {data___animal = "pony"}).Replace("___", "-")%>
Но это отстой, потому что оно уродливо и сломается, когда Model.Something
содержит три символа подчеркивания. Buhu.
Невозможно использовать - как часть любого идентификатора. http://msdn.microsoft.com/en-us/library/aa664670(VS.71).aspx
Просто нашел этот пост при поиске по той же проблеме.
Я нашел эту ссылку: 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;
}
Соберите способы использования данных Asp-Mvc для конкретных целей:
MVC 3+: используйте знак подчеркивания _, и он будет автоматически заменен на mvc
MVC 1?, 2: см. Ответ @Jean-Francois, который указывает на this
Нет, поскольку тире является оператором С# (минус), а пробел не имеет значения.
В настоящий момент компилятор считает, что вы пытаетесь вычесть animal
из data
, который не работает, если для типов не указан оператор -
.
Нет, вы не можете использовать символ дефиса. Вам нужно использовать буквенно-цифровые символы, символы подчеркивания или другие символы, описанные здесь. '-'
рассматривается как минус. data-animal
будет обрабатываться так же, как data - animal
, поэтому он даже не будет компилироваться, если вы не определили отдельно data
и animal
(и он может представлять тонкие ошибки, если у вас есть!).
Изменить: с возможностью С# иметь идентификаторы с escape-последовательностями Unicode, вы можете получить эффект тире в имени идентификатора. Управляющая последовательность для "& mdash" (более длинный символ тире) "U + 2014" . Таким образом, вы будете выражать данные-животные как data\u2014animal
. Но с точки зрения стиля кодирования я не уверен, почему вы не выбрали более удобное соглашение об именах.
Кроме того, еще один пункт, который следует выделить из "2.4.2 Идентификаторы (С#)": вы не можете иметь две из этих управляющих последовательностей в обратном порядке в идентификаторе (например, data\u2014\u2014animal
).