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

Передача объекта в атрибуты HTML

Как передать объект в атрибуты HTML? Например, у меня есть следующий код:

var attrs = new { id = "myid", style = "color: Red;" };

Как преобразовать attrs в строку как это, чтобы вставить их в разметку HTML:

id="myid" style="color: Red;"

Заранее спасибо:)

4b9b3361

Ответ 1

Эта функциональность, как ни удивительно, предоставляется классом RouteValueDictionary:

IDictionary<string, object> htmlAttributes = new RouteValueDictionary(attrs);

Затем вы можете использовать этот словарь в сочетании с TagBuilder, который вы, вероятно, будете использовать в любом случае:

var tagBuilder = new TagBuilder("input");
tagBuilder.MergeAttributes(htmlAttributes);
tagBuilder.ToString(TagRenderMode.Normal);

Это можно увидеть в исходном коде ASP.NET MVC; один из более простых примеров - TextAreaExtensions.cs.

EDIT:

Чтобы правильно преобразовать "data_attr" в "data-attr", используйте статический метод AnonymousObjectToHtmlAttributes.

IDictionary<string, object> htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(attrs);

Ответ 2

Вам не нужно преобразовывать в строку. Последним параметром для HTML-помощников является объект. Вы просто дадите ему объект, как вы написали выше:

Для примера

@Html.TextBoxFor(x => x.Foo, new { size = 10, maxlength = 10 }) 
@Html.TextAreaFor(x => x.Notes, new { @class = "additionalInfo" })
@Html.TextBoxFor(x=>x.Registration.Address.Postcode, new {type="number", @class="postcode numeric", size=5, maxlength=5})

на боковой ноте вы, вероятно, не должны устанавливать стиль directy inline с вашим HTML и вместо этого использовать класс CSS/селектор с отдельной таблицей стилей. Кроме того, идентификатор каждого элемента DOM должен автоматически устанавливаться при использовании помощников HTML MVC

Ответ 3

Здесь, как это сделать:

var htmlAttributes = new { id="myid", @class="myclass" };

string string_htmlAttributes = "";
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(htmlAttributes))
{
  string_htmlAttributes += string.Format("{0}=\"{1}\" ", property.Name.Replace('_', '-'), property.GetValue(htmlAttributes));
}

PropertyDescriptor относятся к классу System.ComponentModel