Как добавить атрибуты данных в элемент HTML в ASP.NET MVC?

Я научилсянесколько минут назад что добавление атрибутов данных является хорошим способом добавления пользовательской информации в элементы HTML. Поэтому я попытался сделать так:


Но это заканчивается как синтаксическая ошибка. Как я могу определить пользовательские атрибуты данных?

РЕДАКТИРОВАТЬ:

Я вижу, что могу добиться этого эффекта, используя:


Но это нене выглядишь ... ммм ... чисто! Есть ли лучший способ сделать это?

 drzaus06 февр. 2014 г., 20:38
примечание: более новый правильный ответstackoverflow.com/a/5872576/1037948, вниз по этой странице, если вы нене нравится прокрутка;)
 ED-20914 февр. 2013 г., 23:55
Смотрите этот вопросАтрибуты переноса html с asp.net mvc ' stackoverflow.com/questions/2897733/...

Ответы на вопрос(4)

Я могу'Не вижу способа получить объявление анонимного типа, чтобы принятьdata-myid, с тех пор'не является допустимым именем свойства в C #. Один из вариантов - создать новую перегрузку, которая потребует дополнительныхdataAttributes параметр, и prependsdata- на имена для вас ...

using System.ComponentModel;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Web.Routing;

static class TextBoxExtensions
{
    public static string TextBox(this HtmlHelper htmlHelper, string name, object value, object htmlAttributes, object dataAttributes)
    {
        RouteValueDictionary attributes = new RouteValueDictionary(htmlAttributes);
        attributes.AddDataAttributes(dataAttributes);

        return htmlHelper.TextBox(
            name, 
            value, 
            ((IDictionary)attributes);
    }

    private static void AddDataAttributes(this RouteValueDictionary dictionary, object values)
    {
        if (values != null)
        {
            foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(values))
            {
                object obj2 = descriptor.GetValue(values);
                dictionary.Add("data-" + descriptor.Name, obj2);
            }
        }

    }
}

Затем вы можете добавитьdata-myid приписать


Однако это оставляет вам возможность создавать эту перегрузку для любых других методов, которые вы хотите принимать атрибуты данных, что является проблемой. Вы можете обойти это, переместив логику в

public static IDictionary MergeDataAttributes(
    this HtmlHelper htmlHelper,
    object htmlAttributes,
    object dataAttributes)

и назвать это как


Решение Вопроса

Используйтенижнее подчеркивание вместо тире.

new { data_myid = m.ID }

этоопределенно работает в MVC3 (Гавань»проверил другие версии). Подчеркивание будет преобразовано в тире при рендеринге HTML.

РЕДАКТИРОВАТЬ

Это работает и в последних версиях MVC.

 Ryan22 окт. 2012 г., 11:14
Работает в MCC 4 тоже.
 Hemant10 февр. 2014 г., 07:12
Я отметил это как ответ, потому что это чище и проще.
 shatl16 окт. 2011 г., 19:21
Спасибо, это работает
 benpage23 авг. 2013 г., 08:50
это обязательно должен быть отмечен ответ :)

Я думаю, вам придется создать свой собственный помощник, чтобы сделать это для вас. Я не могу найти способ сделать это непосредственно в представлении.


результаты: я


Я не уверен, в чем твоя проблема. Может иметь какое-то отношение к "-" в вашем анонимном типеимя свойства

Да, компилятор неМне не нравится ваше имя атрибута. Из комментариев, чтобы добавить html5-атрибуты данных, вы 'Вам придется использовать словарь или создать другое расширение, которое упрощает построение словарей.

 Will20 авг. 2009 г., 15:12
Ааааааа, 5, мой плохой.
 redsquare20 авг. 2009 г., 15:15
да, выглядит так
 redsquare20 авг. 2009 г., 15:05
компилятор не любит дефис в ключе объекта
 Will20 авг. 2009 г., 15:05
Почему тыхочу поставить неверный атрибут на ваш HTML?
 Will20 авг. 2009 г., 15:13
Похоже, что 5 спецификаций полностью несовместимы с объявлениями анонимного типа.
 Hemant20 авг. 2009 г., 15:06
Да! Проблема из-за "-" в имени атрибута. В любом случае можно ли определить этот атрибут, так как в соответствии с HTML 5 любой пользовательский атрибут должен принимать форму "данных XXX»
 redsquare20 авг. 2009 г., 15:06
@ будет ли это спецификацией html5
 Hemant20 авг. 2009 г., 15:03
Как этот код определяет "данных MyID» атрибут в текстовом поле?

Ваш ответ на вопрос