数据注释的比较

时间:2012-06-20 16:38:23

标签: .net asp.net-mvc

以下三个注释之间有什么区别:

[ScaffoldColumn(false)]
[Display(Name = "")]
[Display(AutoGenerateField=false)]

有相关的SO问题herethere,但我认为没有任何问题涵盖所有三个问题。我还看到一篇SO帖子声称AutoGenerateField=false accomplishes nothing。如果是这样,那么它是为了什么?至于其他两个注释-ScaffoldColumn(false)和Display(Name =“”) - 它们是等价的吗?

2 个答案:

答案 0 :(得分:4)

  1. ScaffoldColumn(false):当您分别使用@Html.DisplayForModel()@Html.EditorForModel 时隐藏显示或编辑器字段 只要您使用默认的显示和编辑模板。如果您覆盖内置模板,则需要在模板中添加回对此属性的支持。
  2. Display(Name=""):影响显示为DisplayForModelLabelLabelForModelEditorForModel标签的文字。在这种情况下,显示名称设置为空字符串,因此字面上将输出为标签。这不会阻止生成标签。
  3. Display(AutoGenerateField=false):似乎无法按照您的建议被任何默认模板或帮助程序识别。
  4. 不,1和2 相同。

答案 1 :(得分:0)

标记为ScaffoldColumn(false)

public class Hate
{
    [ScaffoldColumn(false)]
    public string What { get; set; }

    public string Why { get; set; }
}

@model StrippingHtml.Models.Hate
@{
  ViewBag.Title = "What & Why You Hate";
}
<h2>
  What & Why You Hate</h2>
@using (Html.BeginForm("Save", "Hate"))
{
  <div>
    @Html.EditorForModel()
  </div>
}

enter image description here

标记为显示(名称=“”)

public class Hate
{
    [Display(Name="")]
    public string What { get; set; }

    public string Why { get; set; }
}

enter image description here