我想对具有“总和”(十进制)字段的“费用”对象进行建模。在视图中,我想验证用户输入了一个正值。
OTOH 我想确保在数据库中保存具有负值的对象。
现在,模型看起来像这样:
//------The model-------
public class Operation {
[Range(typeof(decimal), "0.0001", "79228162514264337593543950335")]
public virtual decimal Sum { get; set; }
[...]
}
public class Expense : Operation
{
public override decimal Sum
{
get
{
return base.Sum;
}
set
{
base.Sum = - Math.Abs(value);
}
}
}
//------In the controller-------
[HttpPost]
public ActionResult CreateExpense(Expense operation, int[] SelectedTags)
{
return CreatePost(operation, SelectedTags);
}
private ActionResult CreatePost(Operation operation, int[] SelectedTags)
{
if (ModelState.IsValid) // <-- this fails
[...]
}
问题是,MVC 验证适用于对象的属性(不是 POST 的表单值),看到负值并且无法验证。
我应该怎么做才能解决这个问题?
在我看来,我没有分离关注点(验证用户输入与维护数据库完整性)。
我应该使用视图模型来保存用户输入,然后从视图模型中填充实际模型吗?听起来不像KISS...