在其他EditorTemplate中获取该字段的属性

时间:2014-01-27 11:46:02

标签: asp.net-mvc razorengine modelmetadata

我想为Int32制作额外的编辑器模板。在其中我想获得所有属性(自定义/默认数据注释)并与它们一起工作:

@model Int32

@{
    string propertyName = ViewData.ModelMetadata.PropertyName;
    var attributes = ViewData.ModelMetadata.GetSomeHowAllTheAttributesOfTheProperty;
    SomeWorkWithAttribute(attributes);

}
<input type="text" name="@propertyName" value="@ViewData.ModelMetadata.DisplayFormatString" class="form-control"/>

那么问题是如何在EditorTemplate中获取属性的所有属性?

提前谢谢

2 个答案:

答案 0 :(得分:4)

编辑:删除了初始答案(问题中的信息不够):

由于您需要访问自定义属性,我建议如下:

A :如果您只是使用自定义属性保存某些值,请使用AdditionalMetadataAttribute

型号:

[Additional("myAdditionalInfoField", "myAdditionalInfoValue")]
public int IntProperty { get; set; }

查看:

@{
    string valueFromAttribute = ViewData.ModelMetadata.Additional["myAdditionalInfoField"].ToString();
}

B :如果您在自定义属性中执行更复杂的工作,请获取模型的当前元数据属性,并将计算值保存在ViewData.ModelMetadata.Additional字典中。请注意,这需要您实施custom metadata provider。 可以找到详细的实施here

答案 1 :(得分:0)

这是如何从DisplayTemplate或EditorTemplate访问模型属性中的所有属性的方法:

var attributes = ((Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata)ViewData.ModelMetadata).Attributes;

然后您将获得所需的自定义属性:

var yourAttribute = attributes.PropertyAttributes.OfType<YourAttribute>().FirstOrDefault();

现在您有yourAttribute做您想做的事!