我使用的是具有完整对象集的API。我不想在mvc3代码中重新创建对象模型只是为了使用DataAnnotations。
有没有办法在包装类中使用此功能?对象有自己的验证规则,我可以重用,但希望使用内置的mvc框架来显示消息。
答案 0 :(得分:1)
您可以使用this链接中的以下示例中的元数据类,但我猜您必须以编程方式添加MetaDataType属性...
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace MvcApplication1.Models
{
[MetadataType(typeof(MovieMetaData))]
public partial class Movie
{
}
public class MovieMetaData
{
[Required]
public object Title { get; set; }
[Required]
[StringLength(5)]
public object Director { get; set; }
[DisplayName("Date Released")]
[Required]
public object DateReleased { get; set; }
}
}
答案 1 :(得分:1)
您可以创建一个继承自DataAnnotationsModelMetadataProvider
的类,您可以在其中使用对象集,并将项目写为DataAnnotations
。一个简短的例子:
public class MyModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
private MyEntities _db = new MyEntities();
protected override ModelMetadata CreateMetadata(
IEnumerable<Attribute> attributes,
Type containerType,
Func<object> modelAccessor,
Type modelType,
string propertyName)
{
var modelMetadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
// load object
var objectSet = _db.ObjectSets.FirstOrDefault(x => x.PropertyName == propertyName);
// check attributes
if (objectSet.IsRequired)
modelMetadata.IsRequired = true;
return modelMetadata;
}
}
然后,在Application_Start
方法中在Global.asax.cs中注册您的提供者,如下所示:
ModelMetadataProviders.Current = new MyModelMetadataProvider();
答案 2 :(得分:0)
我从未尝试过这个。您可以在MVC模型中编写所有API类继承的基类。在该基类上实现IValidatableObject并使用现有的验证规则。使用MetadataType,您仍然需要使用需要验证的那些文件重写该类。