asp.net mvc中的整数验证

时间:2009-05-07 06:30:13

标签: asp.net-mvc

我正在使用服务器端验证,如

 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;
        }
    }

3 个答案:

答案 0 :(得分:5)

我认为你会从框架中自动获得第一条消息“需要一个值”,因为你的Price属性是一个值类型,它永远不能为空。

因此,当您发布空白字段时,框架通常会尝试将null分配给此属性,这在这种情况下是不可能的。

如果您将类型更改为可为空:

public double? Price { get; set; }

该特定信息应该消失。然后,您可以将验证更改为:

    if (Price == null)
        yield return new RuleViolation("Price is required", "Price");

数据库字段不允许空值的事实不应干扰您的视图模型。

答案 1 :(得分:2)

为了使 Thomas Eyde 写上面的内容(不会弄乱代码),你可以......

  1. 打开相应的 .dbml 文件
  2. 点击“价格”属性
  3. 在“Visual Studio属性”窗口中,将Nullable值从False更改为True
  4. 保存文件!
  5. 你现在可以进入你的班级并添加if语句,VS不应该抱怨。

答案 2 :(得分:1)

那是因为Default Model Binder会添加该错误。您可以为该特定对象编写自己的模型绑定器,并直接使用表单集合来获得对验证的更多控制。