Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在附加EditorTemplate中获取字段的属性_Asp.net Mvc_Razorengine_Modelmetadata - Fatal编程技术网

Asp.net mvc 在附加EditorTemplate中获取字段的属性

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

我想为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"/>
@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();