使用好友类时MVC3验证(mvc3 validation when using buddy clas

2019-09-27 10:35发布

我工作的一个MVC3应用程序,有一些问题得到验证工作,我想。

应用程序使用好友类的车型。 (这是我没有在过去使用和我有点困惑,为什么它们被用来...反正)

我想补充所需的字段,以确保提交的数据是正确的。 我曾尝试将必填字段的哥们类。

当我提交表单没有客户端验证发生和调试程序步骤到实体框架生成的代码。 这里是抱怨说,包含空值的字段是造成无效。 如果我经历了所有这些步骤也终于得到到我,如果(ModelState.IsValid)正显示出假的控制器。

我有客户端验证接通。

难道我的意思好友一流水平,或在视图模型是应用了数据验证?

另外一个问题是,为什么使用哥们类? 对我来说,他们似乎在复杂的事情。

更新添加好友类的示例

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

Answer 1:

巴迪班是元数据类把数据注解属性时,你是不是在原来的类,即不能编辑它的控制。 典型的情况是,当被像实体框架的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))]

更多关于哥们类在这里和这里



Answer 2:

您通常会使用一个哥们类时,不可能将元数据添加到实体类如当通过一个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; }
}

然后,您可以通过客户类,其中将优先设置视图。

在你的情况我不知道,如果你只有一个局部类或两个(与其他没有显示,但请,如果有提供)。 我想知道你是如何获得客户的优先级信息,因为我想知道如果这是你如何使用的问题ModelState.IsValid ? 我想问的原因是,没有set访问时宣布的优先级属性,所以我想知道这是怎么从视图设置,以报告,它是不是有效?



Answer 3:

你也可以使用一个哥们类时,不可能将元数据添加到实体类如当通过WCF数据合同自动生成的模型。



文章来源: mvc3 validation when using buddy classes