Подтвердить что ты не робот

Dash (-) в анонимном классе

Можно ли использовать тире (-) в имени участника анонимного класса? Мне в основном интересно это использовать с 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.

4b9b3361

Ответ 2

Просто нашел этот пост при поиске по той же проблеме.

Я нашел эту ссылку: 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;
}

Ответ 3

Соберите способы использования данных Asp-Mvc для конкретных целей:

MVC 3+: используйте знак подчеркивания _, и он будет автоматически заменен на mvc
MVC 1?, 2: см. Ответ @Jean-Francois, который указывает на this

Ответ 4

Нет, поскольку тире является оператором С# (минус), а пробел не имеет значения.

В настоящий момент компилятор считает, что вы пытаетесь вычесть animal из data, который не работает, если для типов не указан оператор -.

Ответ 5

Нет, вы не можете использовать символ дефиса. Вам нужно использовать буквенно-цифровые символы, символы подчеркивания или другие символы, описанные здесь. '-' рассматривается как минус. data-animal будет обрабатываться так же, как data - animal, поэтому он даже не будет компилироваться, если вы не определили отдельно data и animal (и он может представлять тонкие ошибки, если у вас есть!).

Изменить: с возможностью С# иметь идентификаторы с escape-последовательностями Unicode, вы можете получить эффект тире в имени идентификатора. Управляющая последовательность для "& mdash" (более длинный символ тире) "U + 2014" . Таким образом, вы будете выражать данные-животные как data\u2014animal. Но с точки зрения стиля кодирования я не уверен, почему вы не выбрали более удобное соглашение об именах.

Кроме того, еще один пункт, который следует выделить из "2.4.2 Идентификаторы (С#)": вы не можете иметь две из этих управляющих последовательностей в обратном порядке в идентификаторе (например, data\u2014\u2014animal).