.Net MVC使用不同的验证规则创建和编辑数据库

时间:2014-04-16 16:55:10

标签: asp.net-mvc asp.net-mvc-4

我是.Net MVC的新手。

目前由于服务器规范,我正在使用MVC 4和Visual Studio 2012 for Web。

我正在使用实体框架进行CRUD操作。

我的问题是,我对如何为创建和编辑操作指定不同的验证规则感到困惑:

我的班级是这样的:     公共类Outlet     {         [键]         public int outletID {get;组; }

    [Required]
    [StringLength(10)]
    public string outletCode { get; set; }

    [Required]
    [StringLength(100)]
    public string outletName { get; set; }

    [Required]
    [StringLength(50)]
    public string outletAreaManager { get; set; }

    [Required]
    [StringLength(200)]
    public string outletAddress { get; set; }

    [StringLength(20)]
    public string outletUnitNo { get; set; }

    [Required]
    [StringLength(6)]
    public string outletPostalCode { get; set; }

    [StringLength(10)]
    public string outletPhoneNo { get; set; }
}

当用户创建新插座时,他们可以键入所有字段,但是当想要编辑插座时,某些字段如OutletCode,outletAreaManager是不可编辑的,并且不会在表单中显示,并且由于某些安全原因,我无法将它存储在隐藏区域中,最好的方法是什么?我的意思是在更新数据库时如何编码?如果我使用ModelState.isValid,它将触发outletCode和outletAreaManager的必需属性。

提前致谢。

3 个答案:

答案 0 :(得分:1)

您说您正在使用EF作为数据库。上面的类看起来像View Model类。我假设您在实体类和此视图模型类之间进行映射。

为了适应不同的规则,您应该创建两个不同的类。为了避免重复代码,它们之间的规则是相同的,创建一个基类,然后创建两个实现差异的类。

或许这样的事情:

public class OutletBase { 

    [Key] 
    public int outletID { get; set; }

    [Required]
    [StringLength(100)]
    public string outletName { get; set; }

    [Required]
    [StringLength(200)]
    public string outletAddress { get; set; }

    [StringLength(20)]
    public string outletUnitNo { get; set; }

    [Required]
    [StringLength(6)]
    public string outletPostalCode { get; set; }

    [StringLength(10)]
    public string outletPhoneNo { get; set; }
}


public class OutledCreate : OutletBase
{
        [Required]
        [StringLength(10)]
        public string outletCode { get; set; }

        [Required]
        [StringLength(50)]
        public string outletAreaManager { get; set; }

}

public class OutletEdit : OutletBase      {
}

答案 1 :(得分:0)

您可以将它们存储在隐藏字段中,您只需将它们存储在禁用的字段中即可。这是非常值得信赖的验证。您需要拆分模型。这通常是人们创建ViewModel以供MVC使用,然后将视图模型中的值映射到实体模型的原因。如果您这样做,那么当您获取更新记录时,您根本不会更新不可更改的值。

答案 2 :(得分:0)

抱歉让你大家都感到困惑。

实际上我的意思是部分更新,所以我只需要对部分字段执行表单验证,我使用TryUpdateModel来解决我的问题。

谢谢并欢呼所有