【问题标题】:MVC 5 - Adding Client Validation to refuse the default value?MVC 5 - 添加客户端验证以拒绝默认值?
【发布时间】:2014-08-31 17:24:27
【问题描述】:

我正在使用DropDownListFor 并提供-- Select 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"
        }
    };

【问题讨论】:

  • 要么删除默认参数,要么检查 jquery 中所选下拉列表的值
  • 这有点难说。您似乎发布了“OtherArgument”的价值,但从您所展示的内容来看,尚不清楚这将来自哪里。也许我只是没有看到明显的东西。
  • @ArijitMukherjee 如果我删除默认参数,那么下拉菜单会自动选择第一个选项。我不希望这样,因为用户更有可能在不更改选项的情况下提交表单(我想强制他们选择)。
  • @MikeC。没错,表单还有其他字段(例如OtherArgument)正在填写但不在上述代码中。所有其他字段都通过它们的值。
  • 我明白了。实际上,我只是错误地阅读了您在上面的内容。抱歉,请忽略我的评论!

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


【解决方案1】:

这里的第一个问题是 model selected 和用户可以选择的 models 之间的区别. 将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" />
}

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

脚本参考

<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 验证

屏幕抓取

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

【讨论】:

    【解决方案2】:

    为了触发客户端验证,输入必须在 &lt;form&gt; 内,并且取决于版本(MVC 3 和更早版本),特别是使用 @Html.BeginForm

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

    【讨论】:

    【解决方案3】:

    在模型中,您所要做的就是使用注释设置允许的范围。 “默认值”为 0,因此将您的范围设置为 1 到 maxint。如果他们不选择某些东西,您将抛出模型错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      相关资源
      最近更新 更多