MVC 5 - 添加客户端验证以拒绝默认值?

时间:2014-07-10 10:59:19

标签: jquery asp.net asp.net-mvc asp.net-mvc-5 client-side-validation

我使用DropDownListFor并提供默认选择-- Select Make --,其值为空。我想向用户提供一些操作提示(因此选择Make')但不想让他们真正提交该值。目前,该网站允许这样做。

我认为添加最小长度为2会阻止它,但没有运气。

我是.NET MVC的新手,所以如果我以完全错误的方式做这件事,请告诉我。

实际的POST请求正文是:

Make=&OtherArgument=1&NextArgument=test

查看代码:

@Html.LabelFor(m => m.Make)
@Html.DropDownListFor(m => m.Make, Model.Make, "-- Select Make --")
@Html.ValidationMessageFor(m => m.Make)

型号代码:

    [Required(ErrorMessage = "*", AllowEmptyStrings = false)]
    [StringLength(50, MinimumLength = 2, ErrorMessage = "*")]
    public IEnumerable<SelectListItem> Make = new List<SelectListItem>
    {
        new SelectListItem
        {
            Text = "Deere",
            Value = "Deere"
        },
        new SelectListItem
        {
            Text = "Case",
            Value = "Case"
        },
        new SelectListItem
        {
            Text = "CAT",
            Value = "CAT"
        }
    };

3 个答案:

答案 0 :(得分:6)

此处的第一个问题是 模型选择 与用户可以选择的 模型 之间的区别。 将ModelSelect属性添加到模型中可以解决此问题(以及一些视图更改)。

第二个问题是通过添加脚本引用来启用jquery不显眼的验证。

这些是您需要采取的步骤,以便使用javascript验证来阻止表单提交(假设MVC4 +)。

<强>模型

    public class AModel
    {
        [Required(ErrorMessage = "*", AllowEmptyStrings = false)]
        [StringLength(50, MinimumLength = 2, ErrorMessage = "*")]
        public string SelectedMake { get; set; }
        public IEnumerable<SelectListItem> Make = new List<SelectListItem>
        {
            new SelectListItem
            {
                Text = "Deere",
                Value = "Deere"
            },
            new SelectListItem
            {
                Text = "Case",
                Value = "Case"
            },
            new SelectListItem
            {
                Text = "CAT",
                Value = "CAT"
            }
            };
    }

注意SelectedMake属性

查看

@using(Html.BeginForm()){
    @Html.LabelFor(m => m.Make)
    @Html.DropDownListFor(m => m.SelectedMake, Model.Make, "-- Select Make --")
    @Html.ValidationMessageFor(m => m.SelectedMake)
    <input type="submit" value="submit" />
}

注意下拉列表的第一个参数中的SelectedMake和ValidationMessageFor

脚本参考

<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

需要启用jquery验证

屏幕抓取

enter image description here

注意红色的星号,jquery unobtrusive现在阻止表单提交。

答案 1 :(得分:0)

为了触发客户端验证,输入必须在<form>范围内,具体取决于版本(MVC 3及更早版本),具体使用@Html.BeginForm

如果这不是问题,你可以发布更多的观点吗?

答案 2 :(得分:0)

在模型中,您要做的就是设置带注释的允许范围。 “默认值”为0,因此将范围设置为1至maxint。如果他们没有选择,就会抛出模型错误。