Например, если вы проверите эти два метода расширения, единственное различие - это тип htmlAttributes, поэтому вы могут передавать ваши htmlAttributes двумя разными способами:
public static MvcHtmlString TextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
IDictionary<string, object> htmlAttributes);
public static MvcHtmlString TextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
object htmlAttributes);
И использовать их одним из следующих способов:
@Html.TextBoxFor(model => model.TagLine,
new { @placeholder = "We live to make art." })
@Html.TextBoxFor(model => model.TagLine,
new Dictionary<string, object> {
{ "placeholder", "We live to make art." } })
Я проверил исходный код MVC и знаю, что в фоновом режиме они используют тот же метод, но тот, который принимает анонимный объект, использует HtmlHelper.AnonymousObjectToHtmlAttributes (htmlAttributes)
, чтобы сделать анонимный объект словарем.
С моей точки зрения, представления лучше использовать анонимный объект. Что вы думаете, ребята? Есть ли недостатки в использовании анонимного объекта?