如何从@ Html.EditForModel()中排除一个字段,但让它显示使用Html.DisplayForModel()

Rol*_*epp 5 display-templates asp.net-mvc-3

我正在阅读ASP.NET MVC及其所有有趣的用法,我刚刚发现了DataTemplates.

在我急着要测试这个东西出来,我将我简单的模型之一到使用@Html.DisplayForModel(),并@Html.EditForModel()和它的工作就像一个幸运符,它是:)

我立即发现的一件事是,我无法轻松定义一个字段来显示在显示视图上,但根本不存在用于编辑......

tpe*_*zek 12

您可以使用IMetadataAware接口创建属性,该属性将在元数据中设置ShowForEdit和ShowForDislay:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class TemplatesVisibilityAttribute : Attribute, IMetadataAware
{
    public bool ShowForDisplay { get; set; }

    public bool ShowForEdit { get; set; }

    public TemplatesVisibilityAttribut()
    {
        this.ShowForDisplay = true;
        this.ShowForEdit = true;
    }

    public void OnMetadataCreated(ModelMetadata metadata)
    {
        if (metadata == null)
        {
            throw new ArgumentNullException("metadata");
        }

        metadata.ShowForDisplay = this.ShowForDisplay;
        metadata.ShowForEdit = this.ShowForEdit;
    }

}
Run Code Online (Sandbox Code Playgroud)

然后您可以将它附加到您的财产,如下所示:

public class TemplateViewModel
{
  [TemplatesVisibility(ShowForEdit = false)]
  public string ShowForDisplayProperty { get; set; }

  public string ShowAlwaysProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这就是你所需要的.