我是.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的必需属性。
提前致谢。
答案 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来解决我的问题。
谢谢并欢呼所有