我正在将一个项目从ASP.NET MVC迁移到ASP.NET Core 6.0。
我在ASP.NET MVC项目中有以下类:
public class CustomModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
{
var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
var textAreaAttribute = attributes.SingleOrDefault(a => typeof(TextAreaAttribute) == a.GetType());
if (textAreaAttribute != null)
{
metadata.AdditionalValues.Add("TextArea", null);
metadata.AdditionalValues.Add("Rows", ((TextAreaAttribute)textAreaAttribute).Rows);
metadata.AdditionalValues.Add("Columns", ((TextAreaAttribute)textAreaAttribute).Columns);
metadata.AdditionalValues.Add("MaxLength", ((TextAreaAttribute)textAreaAttribute).MaxLength);
metadata.AdditionalValues.Add("Placeholder", ((TextAreaAttribute)textAreaAttribute).Placeholder);
}
var textInputAttribute = attributes.SingleOrDefault(a => typeof(TextInputAttribute) == a.GetType());
if (textInputAttribute != null)
{
metadata.AdditionalValues.Add("TextInput", null);
metadata.AdditionalValues.Add("MaxLength", ((TextInputAttribute)textInputAttribute).MaxLength);
}
return metadata;
}
}
字符串
在ASP.NET Core 6.0中与此等效的是什么?
一个使用案例:
[TextInput(MaxLength = 10)] // limit number of field input characters to 10
型
文本输入:
public class TextInputAttribute : Attribute
{
public int MaxLength { get; set; }
public Dictionary<string, object> OptionalAttributes()
{
return new Dictionary<string, object>
{
{ "MaxLength", MaxLength }
};
}
}
型
在ASP.NETMVC项目Global.asax文件中设置了以下内容:
ModelMetadataProviders.Current = new CustomModelMetadataProvider();
型
1条答案
按热度按时间wtlkbnrh1#
.net内核中没有
DataAnnotationsModelMetadataProvider
,只有IModelMetadataProvider
。你可能注意到它提供DefaultModelMetadataProvider
作为基类:字符串
但在
DefaultModelMetadataProvider
中,AdditionalValues
是只读属性,因此根据代码,替代选项应该是IDisplayMetadataProvider
:型
在Program.cs中注册:
型
有关更多详细信息,请参阅this link。