例如,如果您检查这两种扩展方法,则唯一的区别是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)将匿名对象制成字典。

以我的观点, View 更干净,可以使用匿名对象。你们觉得怎么样?使用匿名对象有什么缺点吗?

最佳答案

并没有太大的区别,但是使用匿名对象对于调用者来说是一种更简洁,更易读的语法,现在被认为是更标准的做法。如果您喜欢微优化,那么使用IDictionary可能会对性能产生微不足道的影响,而微不足道。

自从ASP.NET MVC 1.0 CTP出现以来,IDictionary重载选项就一直停滞不前,当时C#3.0和匿名对象还很新。 Eilon Lipton的博客文章Using C# 3.0 Anonymous Types as Dictionaries提出了一些背景知识。

关于c# - ASP.NET MVC中htmlAttributes的匿名类和IDictionary <string,object>之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8160275/

10-10 18:29
查看更多