Например, если вы проверите эти два метода расширения, единственным отличием будет тип 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)
, чтобы сделать анонимный объект словарем.
С моей точки зрения, представления более чисты, чтобы использовать анонимный объект. Что вы думаете, ребята? Есть ли недостатки в использовании анонимного объекта?