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