【问题标题】:MVC Validation model attributes: Client side validation not occurring, only server sideMVC 验证模型属性:客户端验证未发生,仅服务器端
【发布时间】:2016-04-15 16:30:14
【问题描述】:

我在 ASP.NET MVC 5.2 项目中安装了 jQuery.Validation 1.15.0,我正在尝试学习 MVC 的基础知识,目前正在验证模型数据。

我的印象是,我添加的验证属性会生成客户端验证,并且在所有客户端验证都通过之前不会发生回发。但是,尽管验证通常有效,但每次都会发生回发,即使在没有提供 VendorId 值的情况下也是如此。

public class StateAssessmentViewModel
{                
    [Required(ErrorMessage = "Vendor ID is required")]   
    [MaxLength(4, ErrorMessage="{0} can not be longer than {1} characters." )]      
    [Display(Name = "Vendor ID")]
    public int VendorId { get; set; }

    [Display(Name = "Effective Date")]
    [DisplayFormat(DataFormatString = "{0:MM-dd-yyyy}", ApplyFormatInEditMode = true)]
    public DateTime EffectiveDate { get; set; }
}

This 站点确认,如果在浏览器 Chrome v49 中启用了 Javascript,则应首先在客户端上执行验证,并且确实如此。事实上,“生效日期”字段上有一个有效的 jQuery 日历,因此肯定启用了 Javascript。

我可以寻找什么来帮助我确定为什么客户端上根本没有执行验证?

查看源码时生成的html如下:

<div class="form-group">
            <label class="control-label col-md-2" for="VendorId">Vendor ID</label>
            <div class="col-md-10">
                <input class="input-validation-error form-control text-box single-line" data-val="true" data-val-maxlength="Vendor ID can not be longer than 4 characters." data-val-maxlength-max="4" data-val-number="The field Vendor ID must be a number." data-val-required="Vendor ID is required" id="VendorId" max="4" min="0" name="VendorId" type="number" value="3333a" />
                <span class="field-validation-error text-danger" data-valmsg-for="VendorId" data-valmsg-replace="true">The value &#39;3333a&#39; is not valid for Vendor ID.</span>
            </div>
        </div>

我也在使用 Bootstrap,并试图过滤掉 VendorId 字段的非数字按键,但这没有效果。我也尝试过设置最大和最小长度。

我还期望 EffectiveDate 模型属性上的 DisplayFormat 属性会产生一些客户端影响。它没。这是通过“查看源代码”生成的 HTML

<div class="form-group">
    <label class="control-label col-md-2" for="EffectiveDate">Effective Date</label>
    <div class="col-md-10">
        <input class="input-validation-error form-control text-box single-line" data-val="true" data-val-date="The field Effective Date must be a date." data-val-required="The Effective Date field is required." id="txtEffectiveDate" name="EffectiveDate" type="datetime" value="" />
        <span class="field-validation-error text-danger" data-valmsg-for="EffectiveDate" data-valmsg-replace="true">The Effective Date field is required.</span>
    </div>
</div>

为什么客户端验证没有发生?

【问题讨论】:

  • 您是否在 BungleConfig.cs 类中包含 jquery 验证库?如果是这样,您是否在布局文件中包含该脚本包?鉴于它正在生成的 HTML,它应该可以正常工作
  • 就是这样。我很惊讶我没听懂。让它成为一个答案,我会这样标记它。谢谢!
  • 乐于助人!旧的第二双眼睛把戏:)

标签: asp.net-mvc


【解决方案1】:

您是否在 BungleConfig.cs 类中包含 jquery 验证库?如果是这样,您是否在布局文件中包含该脚本包?鉴于它正在生成的 HTML,它应该可以正常工作

【讨论】:

  • 如果我做得对,我想我需要这两个脚本文件。消除一个或另一个导致错误。包括两者,工作。 bundles.Add(new ScriptBundle("~/bundles/jquery-validation").Include("~/Scripts/jquery.validate.min.js", "~/Scripts/jquery.validate.unobtrusive.min.js") );
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 2011-10-03
  • 2019-01-16
  • 1970-01-01
  • 2013-10-11
  • 2020-09-08
相关资源
最近更新 更多