这真的是不引人注目的jquery验证吗?

时间:2011-10-18 12:36:57

标签: asp.net-mvc asp.net-mvc-3 entity-framework entity-framework-4 unobtrusive-javascript

根据这个定义here

不引人注目的JavaScript避免将内联JavaScript注入HTML。这使您的HTML更小,更简洁,并且更容易更换或自定义JavaScript库。

但是,在阅读此blog时: 这位博客说: 现在要急切地执行验证,即每次用户字段焦点时执行验证,您需要在页面底部添加此脚本。

我不知道我是否感到困惑,但对于我来说,Unobstrusive javascript验证意味着简单的话,页面上没有JAVASCRIPT代码,只有对具有逻辑的.js文件的引用。通过这种方式,您可以将验证逻辑与演示文稿分开。

有了这个说法,我想以下面的形式启用不显眼的验证。我看到的唯一区别是: 第1行:我没有。

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<EagerlyPerformingValidation.Models.UserInformation>
  1. 我应该将jquery逻辑添加到外部javascript文件并引用它。
  2. 我在这里错过了什么吗?

    public class Position{
    
                [DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]   
                public int PositionID { get; set; }
    
                [Required(ErrorMessage = "Position name is required.")]
                [StringLength(20, MinimumLength = 3, ErrorMessage = "Name should not be longer than 20 characters.")]
                [Display(Name = "Position name")]              
                public string name { get; set; }
    
                [Required(ErrorMessage = "Number of years is required")] 
                [Display(Name = "Number of years")]
                [YearsValidationAttribute(5, ErrorMessage = "{0} value must be greater than {1} years.")]        
                public int yearsExperienceRequired { get; set; }
    
                public virtual ICollection<ApplicantPosition> applicantPosition { get; set; }
            }
    
    
    
    
    @model Data.Model.Position
    
    @{
        ViewBag.Title = "Create";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
        <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
    
        @using (Html.BeginForm()) {
            @Html.ValidationSummary(true)
            <fieldset>
                <legend>Position</legend>
    
                <div class="editor-label">
                    @Html.LabelFor(model => model.name)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.name)
                    @Html.ValidationMessageFor(model => model.name)
                </div>
    
                <div class="editor-label">
                    @Html.LabelFor(model => model.yearsExperienceRequired)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.yearsExperienceRequired)
                    @Html.ValidationMessageFor(model => model.yearsExperienceRequired)
                </div>
    
                <p>
                    <input type="submit" value="Create" />
                </p>
            </fieldset>
        }
    
        <div>
            @Html.ActionLink("Back to List", "Index")
        </div>
    

1 个答案:

答案 0 :(得分:1)

根据您的(正确)理解进行的不显眼的验证有点“懒惰”,因为它只在您提交表单时触发。您链接到的博客帖子引用的javascript代码只会导致每次跳出控件时都会触发验证。你是对的,它并不是真正不引人注目的javascript。

我认为你可以让它不引人注目的方法是向每个控件添加data-属性(痛苦)并编写代码来注入脚本,或者将其一点点脚本添加到其中一个你引用的主要javascript文件,这可能是他的意图。

在本书的第8章中有一点很清楚:Wrox Professional ASP.NET MVC 3