我首先使用EF数据库并使用MVC。
我想在属性上添加一些验证以将其旧值与其新值进行比较,并在出现问题时向MVC ModelState报告验证错误。
首先使用代码并使用' set'进行验证会很容易。在物业上。但是我不能首先使用数据库,因为它是自动生成的。
我已经看过使用IValidatableObject和validate()方法,但是到那时候,属性上的值已经被更改,所以我再也看不到那个旧的了。
如果没有创建一种方法来将新值传递给第一个来检查它,我就无法想到另一种方式。
有什么建议吗?
由于
答案 0 :(得分:0)
如果要将新值与旧值进行比较,那么您将不得不首先从数据库中获取值(在更新之前)并进行比较:
[HttpPost]
public ActionResult Update(MyObject myObject)
{
var oldObject = db.Objects.FirstOrDefault(o => o.Id == myObject.Id);
//Compare oldObject.Value to myObject.Value
}
您仍然可以使用IValidatebleObject
并传入您需要的对象以将该逻辑保留在控制器之外。
答案 1 :(得分:0)
它不是理想的,这已经开始说明模型和数据库中的一些弱点,但这是我最终如何做到这一点。
我决定更改模型中的属性,以便set为private,然后在partial类中创建一个单独的方法来设置值。然后验证将在该方法中完成。
感谢您的帮助