我正在开发一个mvc3应用程序,并且在验证工作方面遇到了一些问题。
应用程序正在为模型使用好友类。 (这是我过去没有使用的东西,我有点困惑,为什么他们被使用......无论如何)
我想添加必填字段以确保提交的数据正确无误。我已经尝试将必填字段添加到好友类中。
当我提交表单时,不会发生客户端验证,调试器会进入实体框架生成的代码。这里抱怨包含空值的字段是无效的。如果我逐步完成所有这些,它最终会到达我的if(ModelState.IsValid)显示为false的控制器。
我已启用客户端验证。
我是打算在好友级别或视图模型中应用数据验证吗?
另一个问题是为什么要使用好友类?对我来说,他们似乎过于复杂化了。
更新了好友类的示例
[MetadataType(typeof (CustomerMetaData))]
public partial class Customer
{
public string Priorty
{
get
{
var desc = (Priority) Priority;
return desc.ToString().Replace('_', ' ');
}
}
internal class CustomerMetaData
{
[Required]
[DisplayName("Priorty")]
public string Priorty { get; set; }
答案 0 :(得分:1)
Buddy类是元数据类,用于在您不控制原始类时放置数据注释属性,即无法编辑它。典型情况是类是由像Entity Framework这样的ORM生成的。
//Can't edit this class
public partial class YourClass{
public string SomeField {get; set;}
}
//Add a partial class
[MetadataType(typeof(YourClassMetadata))]
public partial class YourClass{
}
//And a metadata class
public class YourClassMetadata
{
[Required(ErrorMessage = "Some Field is required")]
public string SomeField {get; set;}
}
你确定你有[MetadataType(typeof(YourClassMetadata))]
吗?
答案 1 :(得分:0)
当无法将元数据添加到实体类时(例如,当ORM工具自动生成模型时),通常会使用伙伴类。在这种情况下,您申请的任何元数据都将丢失。
因此,您的原始(自动生成的)类将被定义为部分类:
public partial class Customer
{
public string Priority { get; set; }
}
然后你会生成你的好友类来添加元数据。
[MetadataType(typeof(CustomerMetaData))]
public partial class Customer
{
}
internal class CustomerMetaData
{
[Required]
public string Priority { get; set; }
}
然后,您将Customer类传递给将设置优先级的视图。
在你的情况下,我不确定你是否只有一个或两个部分类(因为另一个没有显示,但请提供,如果有)。我很想知道您是如何从客户处获取优先级信息的,因为我想知道这是否与您使用ModelState.IsValid
的方式有关?我问的原因是在Priority属性上没有声明set访问器,所以我想知道如何从视图中设置它以报告它无效?
答案 2 :(得分:0)
当无法将元数据添加到实体类时,例如当WCF数据协定自动生成模型时,您还将使用伙伴类。