【问题标题】:MVC 3: Hide ID property using EditorForModelMVC 3:使用 EditorForModel 隐藏 ID 属性
【发布时间】:2011-12-01 09:34:17
【问题描述】:

我的视图中有这一行:

@Html.EditorForModel()

这是我的 ViewModel:

public class CommentForm
{
    public int Id { get; set; }

    [DisplayName("Kommentar"), DataType(DataType.MultilineText)]
    public string Comment { get; set; }
}

问题是Id 在表单中呈现为文本字段。实际上,我只想在表单操作中使用Id。是否有一个属性告诉编辑器不要渲染属性Id

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 data-annotations


    【解决方案1】:

    将 ShowForDisplay 和 ShowForEdit 设置为 false 已经由标准完成

     [System.ComponentModel.DataAnnotations.ScaffoldColumn(false)] 
    

    属性。 因此,您的自定义属性似乎有点矫枉过正。

    【讨论】:

      【解决方案2】:

      一种可能性是将其呈现为隐藏字段:

      [HiddenInput(DisplayValue = false)]
      public int Id { get; set; }
      

      另一种可能性是为您的 CommentForm 视图模型编写自定义编辑器模板,并在此模板中包含您想要的任何内容 (~/Views/Shared/EditorTemplates/CommentForm.cshtml):

      @model CommentForm
      <div>
          @Html.EditorFor(x => x.Comment)
      </div>
      

      【讨论】:

      • 干得好 ;) 我删除了我的答案并支持你的答案。如果不是,我们有两个内容相同的答案。
      • 我通过创建自己的属性解决了这个问题,但是我在另外 7 个小时内无法回答我的问题:/ 简而言之,我做了这样的事情:weblogs.asp.net/seanmcalinden/archive/2010/06/11/…
      【解决方案3】:

      感谢您的贡献,但我并不是很喜欢它们。

      我制作了自己的 PreventRenderingAttribute。

      PreventRenderingAttribute.cs

      [AttributeUsage(AttributeTargets.Property)]
      public class PreventRenderingAttribute : Attribute, IMetadataAware
      {
          public void OnMetadataCreated(ModelMetadata metadata)
          {
              metadata.ShowForDisplay = false;
              metadata.ShowForEdit = false;
          }
      }
      

      在 CommentForm 中

      [PreventRendering]
      public int Id { get; set; }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        • 2016-03-27
        • 1970-01-01
        • 2012-02-16
        • 1970-01-01
        • 2013-03-16
        相关资源
        最近更新 更多