我正在使用服务器端验证,如
public IEnumerable<RuleViolation> GetRuleViolations()
{
if (String.IsNullOrEmpty(Name))
yield return new RuleViolation("Name is Required", "Name");
if (Price == 0)
yield return new RuleViolation("Price is Required", "Price");
yield break;
}
当我将Price保留为空白时,则将0作为值。
所以我用0检查它。
在我的数据库中价格不能为空;我正在使用LINQ-to-SQL类。
现在我的问题是,当我把价格留空时,它给了我两条消息.......
那么如何在不显示第一条错误消息的情况下进行自定义验证?
重新评论 我正在修改Professional Asp.net MVC 1.0 here的书籍代码。
Book的HTML页面为Here。
有用page。
public class RuleViolation
{
public string ErrorMessage { get; private set; }
public string PropertyName { get; private set; }
public RuleViolation(string errorMessage)
{
ErrorMessage = errorMessage;
}
public RuleViolation(string errorMessage, string propertyName)
{
ErrorMessage= errorMessage;
PropertyName = propertyName;
}
}
答案 0 :(得分:5)
我认为你会从框架中自动获得第一条消息“需要一个值”,因为你的Price
属性是一个值类型,它永远不能为空。
因此,当您发布空白字段时,框架通常会尝试将null
分配给此属性,这在这种情况下是不可能的。
如果您将类型更改为可为空:
public double? Price { get; set; }
该特定信息应该消失。然后,您可以将验证更改为:
if (Price == null)
yield return new RuleViolation("Price is required", "Price");
数据库字段不允许空值的事实不应干扰您的视图模型。
答案 1 :(得分:2)
为了使 Thomas Eyde 写上面的内容(不会弄乱代码),你可以......
你现在可以进入你的班级并添加if语句,VS不应该抱怨。
答案 2 :(得分:1)
那是因为Default Model Binder会添加该错误。您可以为该特定对象编写自己的模型绑定器,并直接使用表单集合来获得对验证的更多控制。