Передача объекта в атрибуты HTML - PullRequest
43 голосов
/ 22 июня 2011

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

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

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

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

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

Ответы [ 3 ]

72 голосов
/ 22 июня 2011

Эта функциональность, как ни странно, обеспечивается классом 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 .

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

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

IDictionary<string, object> htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(attrs);
22 голосов
/ 22 июня 2011

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

Например,

@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})

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

6 голосов
/ 11 июля 2013

Вот как сделать это преобразование:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...