asp.net-mvc-3 – 如何从@ Html.EditForModel()中排除一个字段,但是使用Html.DisplayForModel()显示它

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

我急于测试这个东西,我将一个更简单的模型转换为使用@ Html.displayForModel()和@ Html.EditForModel(),它就像一个幸运的魅力,它是:)

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

解决方法

您可以使用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;
    }

}

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

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

  public string ShowAlwaysProperty { get; set; }
}

这就是你所需要的.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....