当我使用EditorForModel()时,如何获取时间戳属性?

时间:2011-02-01 20:49:19

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

我有以下使用System.ComponentModel.DataAnnotations:

修饰的域实体
    [HiddenInput(DisplayValue=false)]        
    public int Id { get; set; }

    [Required]
    [Display(Name="Last Name")]
    public string LastName { get; set; }

    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }        

    [Timestamp]
    [HiddenInput(DisplayValue=true)]
    [ScaffoldColumn(true)]
    public byte[] Version { get; set; }

当我使用@Html.EditorForModel()在视图中渲染模型时,不会为version属性渲染任何内容。是否有任何可以强制EditorForModel()方法呈现byte[]

的内容

PS:使用@Html.EditorFor(x => x.Version)效果很好。

3 个答案:

答案 0 :(得分:3)

您还可以创建一个名为Version的EditorTemplate,并根据您的需要设计输出。将UIHint属性添加到版本以便使用它。

答案 1 :(得分:2)

byte[]方法认为EditorForModel是一种复杂类型,目前无法显示这些类型。您可以尝试向模型添加另一个属性(例如,键入为string),该属性将读取和写入Version属性。

答案 2 :(得分:1)

最好编写自己的模板(Object.ascx)。 复制标准MVC Object.ascx模板并将ShouldShow方法更改为:

 public static bool ShouldShow(ModelMetadata metadata, ViewDataDictionary viewData) {
      return metadata.ShowForDisplay
      && metadata.ModelType != typeof(System.Data.EntityState)
      && (!metadata.IsComplexType || metadata.ModelType == typeof(System.Byte[]))
      && !viewData.TemplateInfo.Visited(metadata);
  }