MVC4 FoolProof数据注释 - 如何检查该字段不等于零?

时间:2015-10-13 05:58:38

标签: c# asp.net-mvc-4 jquery-validate

我正在尝试使用MVC Foolproof库来验证我的模型并分别显示错误消息。但是,当我使用Foolproof验证时,单击提交按钮,即使没有显示常规验证。

我的要求是我有一个数字文本框,它不应该为null或零。文本框值是根据从上一个下拉列表中选择的值计算的。

以下是带有数据注释的模型中两个字段的代码

using Foolproof;

  [Required(ErrorMessage = "Fee is not given", AllowEmptyStrings = false)]
    [NotEqualTo("0",ErrorMessage="Duration cannot be zero")]
    public Nullable<int> Duration { get; set; }

Html Textbox

 @Html.TextBoxFor(m => m.MultiCourse.Duration,
        new { @class = "form-control", @placeholder = "Course Duration", @id = "txtCourseDuration" })
            @Html.ValidationMessageFor(m => m.MultiCourse.Duration)

Bundle Config class

 bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/plugins/jQueryVal/jquery.unobtrusive*",
                    "~/plugins/jQueryVal/jquery.validate*",
                    "~/plugins/jQueryVal/mvcfoolproof.unobtrusive*"));

1 个答案:

答案 0 :(得分:3)

万无一失的[NotEqualTo]属性将属性的值与另一个属性的值进行比较。在您的情况下,这会抛出异常,因为您的模型不会(并且不能)包含名为0的属性。

如果只允许正值,则可以使用[Range]属性

[Range(1, int.MaxValue, ErrorMessage = "Duration must be greater than zero")]
public Nullable<int> Duration { get; set; }

或者,如果允许使用负值,则可以在视图模型中包含一个属性(例如)int InvalidDuration并使用

[NotEqualTo("InvalidDuration", ErrorMessage="Duration cannot be zero")]
public Nullable<int> Duration { get; set; }

并在视图中包含隐藏的输入

@Html.HiddenFor(m => m.InvalidDuration)
相关问题