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

标签 asp.net-mvc-3 display-templates

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

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

我立即发现的一件事是,我无法轻松定义一个字段以显示在显示 View 上,但根本无法进行编辑...

最佳答案

您可以使用 IMetadataAware 接口(interface)的创建属性来设置元数据中的 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; }
}

这就是您所需要的。

关于asp.net-mvc-3 - 如何从 @Html.EditForModel() 中排除字段,但使用 Html.DisplayForModel() 显示该字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5583464/

相关文章:

asp.net-mvc - 如何根据kendo ui mvc网格中的条件格式化行

c# - ASP.NET MVC 3 Razor DisplayFor Delegate

c# - CSS 显示模板类名中的额外空间

JavaScript/jQuery 不适用于使用 Ajax 加载的编辑器/显示模板

asp.net-mvc-3 - mvc3 - 如何从源中禁用符号的 htmlencode

c# - 除了一个(登录)之外,保护 Controller 所有操作的最佳方法是什么?

javascript - 如何在 MVC 5 Razor 中调用和刷新局部 View ?

jquery - 级联下拉菜单 MVC 3

liferay - Freemarker没有分配staticUtil

asp.net-mvc - MVC Razor 显示模板