我正在尝试使用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*"));
答案 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)