Asp.net mvc 在附加EditorTemplate中获取字段的属性
我想为Int32制作额外的编辑器模板。在其中,我希望获得所有属性(自定义/默认数据注释),并对它们进行一些处理:Asp.net mvc 在附加EditorTemplate中获取字段的属性,asp.net-mvc,razorengine,modelmetadata,Asp.net Mvc,Razorengine,Modelmetadata,我想为Int32制作额外的编辑器模板。在其中,我希望获得所有属性(自定义/默认数据注释),并对它们进行一些处理: @model Int32 @{ string propertyName = ViewData.ModelMetadata.PropertyName; var attributes = ViewData.ModelMetadata.GetSomeHowAllTheAttributesOfTheProperty; SomeWorkWithAttribute(at
@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"/>
@model Int32
@{
字符串propertyName=ViewData.ModelMetadata.propertyName;
var attributes=ViewData.ModelMetadata.GetSomeHowall属性的属性;
SomeWorkWithAttribute(属性);
}
那么,问题是如何进入editor中,或者对属性的所有属性进行模板化
Thx提前编辑:删除初始答案(问题中信息不足): 由于您需要访问自定义属性,我建议如下: A:如果只是使用自定义属性保存一些值,请使用
AdditionalMetadataAttribute
:
型号:
[Additional("myAdditionalInfoField", "myAdditionalInfoValue")]
public int IntProperty { get; set; }
视图:
B:如果要在自定义属性中执行更复杂的工作,请获取模型的当前元数据属性,并将计算出的值保存在ViewData.ModelMetadata.Additional
字典中。请注意,这要求您实现您的。
可以找到详细的实现。这是如何从DisplayTemplate或EditorTemplate访问模型属性中的所有属性:
var attributes = ((Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.DefaultModelMetadata)ViewData.ModelMetadata).Attributes;
然后可以获得所需的自定义属性:
var yourAttribute = attributes.PropertyAttributes.OfType<YourAttribute>().FirstOrDefault();
var yourtattribute=attributes.PropertyAttributes.OfType().FirstOrDefault();
现在你有了
yourAttribute
可以做任何你想做的事情 问题是“如何获得财产的所有属性?”对不起,我没有完全理解你的意思。“所有属性都有点通用”。MVC“保存”元数据属性中的一些值。例如,Required
属性保存在ModelMetadata.IsRequired
中,依此类推。你能说得更具体些吗?另一个问题是,您实际上针对的是一个值类型而不是引用类型的模型。如果它不是类的属性,则无法设置属性。如果是类属性,则需要提供类实例,以便可以使用反射检索所有“显式”属性。我有属性-MySomeCustomAttribute
我想确保属性具有/不具有该属性…@Maris,我不知道这是否可行。可以使用反射获取属性,但需要包含类的类型。另一个选项是使用AdditionalMetadata
属性并将值保存在那里。它更简单,您可以通过ViewData.ModelMetadata.AdditionalValues
访问它。我知道反射
,但希望它会出现在ViewData中的某个地方。。。也许有人对此有所了解。
var yourAttribute = attributes.PropertyAttributes.OfType<YourAttribute>().FirstOrDefault();