gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 模型元数据 : Is there a way to set IsRequired based on the RequiredAttribute?

转载 作者:行者123 更新时间:2023-12-02 07:14:37 25 4
gpt4 key购买 nike

Brad Wilson 发布了有关 ASP.NET MVC 新 ModelMetaData 的精彩博客系列: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html

在其中,他描述了 ModelMetaData 类现在如何在 View 和模板化帮助器中公开。我想要做的是,如果字段是必需的,则在表单字段标签旁边显示一个星号,因此我考虑使用 ModelMetaData 的 IsRequired 属性。但是,默认情况下,IsRequired 对于所有不可为 null 的属性为 true,而对于所有可为 null 的属性为 false。问题是,字符串始终可以为 null,因此 IsRequired 属性对于字符串始终为 false。有谁知道如何覆盖 IsRequired 设置的默认值?或者,我考虑利用我用来装饰属性的RequiredAttribute 属性,但RequiredAttribute 似乎没有通过ModelMetaData 类公开。有谁知道如何解决这个问题吗?

提前致谢。

最佳答案

您需要创建自己的 ModelMetadataProvider。这是使用 DataAnnotationsModelBinder 的示例

public class MyMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(Collections.Generic.IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
{
var _default = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
_default.IsRequired = attributes.Where(x => x is RequiredAttribute).Count() > 0;
return _default;
}
}

然后在 Global.asax 的 AppStartup 中,您需要添加以下内容以将 MyMetadataProvider 连接为默认元数据提供程序:

ModelMetadataProviders.Current = new MyMetadataProvider();

关于asp.net-mvc - ASP.NET MVC 模型元数据 : Is there a way to set IsRequired based on the RequiredAttribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1662442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com