2

我想为 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 中获取属性的所有属性呢?

提前谢谢

4

2 回答 2

4

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

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

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

模型:

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

看法:

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

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

于 2014-01-27T12:51:46.707 回答
4

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

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

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

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

现在你必须yourAttribute做任何你想做的事!

于 2019-01-22T12:53:26.147 回答