我想为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中获取属性的所有属性?
提前谢谢
答案 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
做您想做的事!