Asp.net mvc 3 使用好友类时的mvc3验证

Asp.net mvc 3 使用好友类时的mvc3验证,asp.net-mvc-3,Asp.net Mvc 3,我正在处理一个mvc3应用程序,在让验证按我所希望的方式工作时遇到了一些问题 应用程序正在为模型使用buddy类。(这是我过去没有用过的东西,我有点困惑为什么要用它们……无论如何) 我想添加必填字段,以确保提交的数据正确无误。我已尝试将必填字段添加到buddy类 当我提交表单时,不会进行客户端验证,并且调试器会进入实体框架生成的代码中。以下是包含空值的字段导致无效的投诉。如果我一步一步地完成所有这些,它最终会到达控制器,在那里我的If(ModelState.IsValid)显示为false 我打

我正在处理一个mvc3应用程序,在让验证按我所希望的方式工作时遇到了一些问题

应用程序正在为模型使用buddy类。(这是我过去没有用过的东西,我有点困惑为什么要用它们……无论如何)

我想添加必填字段,以确保提交的数据正确无误。我已尝试将必填字段添加到buddy类

当我提交表单时,不会进行客户端验证,并且调试器会进入实体框架生成的代码中。以下是包含空值的字段导致无效的投诉。如果我一步一步地完成所有这些,它最终会到达控制器,在那里我的If(ModelState.IsValid)显示为false

我打开了客户端验证

我是要在buddy类级别还是视图模型级别应用数据验证

另一个问题是为什么要使用好友类?在我看来,他们似乎把事情复杂化了

更新添加了一个buddy类的示例

[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; }

Buddy类是元数据类,用于在您无法控制原始类(即无法编辑它)时放置数据注释属性。典型的情况是类由类似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;}
}
是否确实有
[元数据类型(typeof(yourclassmatadata))]


有关buddy类和

buddy类的详细信息buddy类是元数据类,用于在您无法控制原始类(即无法编辑它)时放置数据注释属性。典型的情况是类由类似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;}
}
是否确实有
[元数据类型(typeof(yourclassmatadata))]


有关好友类的更多信息和

当无法向实体类添加元数据时,例如当模型由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 accessor,所以我想知道如何从视图中设置它以报告它无效?

当无法将元数据添加到实体类时,例如当ORM工具自动生成模型时,通常会使用buddy类。在这种情况下,您应用的任何元数据都将丢失

因此,原始(自动生成)类将被定义为部分类:

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 accessor,所以我想知道如何从视图中设置它以报告它无效?

当无法将元数据添加到实体类时,例如当模型由WCF数据协定自动生成时,您也会使用buddy类。

当无法将元数据添加到实体类时,例如当模型由WCF数据契约自动生成时,也将使用buddy类。

Hi Amit,谢谢。是的,它已被使用。我已经用一个例子更新了我的帖子。为了确保所有其他东西都正确排列,在类(和视图)中添加一个int字段,看看MVC是否抛出并出错。如果没有,验证本身就有问题。你好,阿米特,谢谢。是的,它已经被使用了。我已经用一个例子更新了我的帖子。为了确保所有其他东西都正确排列,在类(和视图)中添加一个int字段,看看MVC是否抛出并出错。如果不是,验证本身就有问题。