假设,我有一个积分表,您可以一次输入 0 到 10 个积分。您也可以多次提交积分,但积分总和不得超过 100。如果您总共有 90 分,并且您尝试输入 11 分,则错误消息应显示"您已超过最大值"。使用数据注释可以做到这一点吗?我已经看到了范围验证器,但它似乎仅适用于每个条目,不适用于项目的总和。
如何验证总和?
您要做的是保留 Range
属性,该属性将用于涵盖大多数场景,然后显式处理边缘情况:
[HttpPost]
public ActionResult AddPoints(int points)
{
var currentPoints = repository.GetPointsForUser(User.Identity.Name);
if (currentPoints + points > 100)
{
ModelState.AddModelError("points", string.Format("The points you specified would exceed the maximum of 100, please enter {0} or fewer.", 100 - currentPoints))
}
if (ModelState.IsValid)
{
...
}
}
现在,我对上面的代码采取了一些自由,因为我对您的应用程序一无所知,但希望它足够通用,您至少可以理解这一点。