Это действительно ненавязчивая проверка JQuery? - PullRequest
1 голос
/ 18 октября 2011

Согласно этому определению здесь :

Ненавязчивый JavaScript избегает внедрения встроенного JavaScript в HTML. Это делает ваш HTML меньше и менее загроможденным, а также облегчает замену или настройку библиотек JavaScript.

Однако при чтении этого блога : Блоггер говорит: Теперь для того, чтобы выполнить проверку с нетерпением, т. Е. Выполнять проверку каждый раз, когда выделяются поля пользователей, необходимо добавить этот сценарий внизу страницы.

Я не знаю, запутался ли я, но для меня ненавязчивая проверка javascript означает простыми словами: никакого кода JAVASCRIPT на странице, только ссылки на файлы .js с логикой. Таким образом вы отделяете логику валидации от презентации.

С учетом сказанного я хотел бы включить ненавязчивую проверку в моей следующей форме. Единственное отличие, которое я вижу: 1. Строка 1: у меня ее нет.

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<EagerlyPerformingValidation.Models.UserInformation>
  1. Я должен добавить логику jquery во внешний файл javascript и сослаться на него.

Я что-то здесь упускаю ??

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 Ответ

1 голос
/ 18 октября 2011

Ненавязчивая проверка, выполненная в соответствии с вашим (правильным) пониманием, является своего рода «ленивой» в том смысле, что она срабатывает только при отправке формы. Код javascript, на который ссылается сообщение в блоге, на которое вы ссылаетесь, просто вызывает проверку при каждом выходе из элемента управления. Вы правы, что это не совсем ненавязчивый JavaScript, как представлено.

Я думаю, что вы можете сделать это ненавязчивым, добавив data- атрибуты к каждому элементу управления (боль) и напишите код для вставки скрипта, или добавьте его небольшой кусочек скрипта в один из основных javascript файлы, на которые вы ссылаетесь, что, вероятно, является его намерением.

В главе 8 этой книги есть интересная информация: Wrox Professional ASP.NET MVC 3

...