2013-06-03 3 views
0

Я пытаюсь создать некоторую добавочную форму объекта категории с ненавязчивой проверкой на стороне клиента.asp.net mvc 3 unobstrusive validation issue

Вот моя сущность:

public class Category 
{ 
    public Int32 Id { get; set; } 

    [DisplayName("Alias")] 
    [Required(AllowEmptyStrings = false, ErrorMessage = "Have to complete")] 
    [StringLength(100, ErrorMessage = "asdasdasd", MinimumLength = 3)] 
    public String Name { get; set; } 

    [DisplayName("Name1")] 
    [Required(AllowEmptyStrings = false, ErrorMessage = "Have to complete")] 
    public String DisplayName { get; set; } 

    [DisplayName("Name2")] 
    [Required(AllowEmptyStrings = false, ErrorMessage = "Have to complete")] 
    public String DisplayNameTZK { get; set; } 

    [DisplayName("Url")] 
    [DataType(DataType.Url, ErrorMessage = "Url")] 
    public String Uri { get; set; } 

    public Guid AddingGuid { get; set; } 

    public Boolean IsActive { get; set; } 

    ... 
} 

Вот мое мнение:

@model HSDT.Models.Entities.Category 

@{ 
    Html.EnableUnobtrusiveJavaScript(); 
    Html.EnableClientValidation(); 
} 

@using (Html.BeginForm("", "", null, FormMethod.Post, new { id = "addCategoryForm", name = "addCategoryForm" })) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(false) 

    <fieldset> 
     <legend>Category</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.DisplayName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.DisplayName) 
      @Html.ValidationMessageFor(model => model.DisplayName) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.DisplayNameTZK) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.DisplayNameTZK) 
      @Html.ValidationMessageFor(model => model.DisplayNameTZK) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Uri) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Uri) 
      @Html.ValidationMessageFor(model => model.Uri) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.AddingGuid) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.AddingGuid) 
      @Html.ValidationMessageFor(model => model.AddingGuid) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.IsActive) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.IsActive) 
      @Html.ValidationMessageFor(model => model.IsActive) 
     </div> 

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

Теперь я оставил все свои входы Emty и попытались проверить эту форму, чтобы получить ошибки показано в моей модели, используя :

$("#addCategoryForm").validate().valid() 

но я получаю true (и без ошибок), в результате, но должно быть false, потому что в аннотации данных я добавил атрибут [Required] для нескольких полей. Что я делаю неправильно?

Спасибо за любой шаг.

EDIT-1

Вот моя конфигурация:

Вот ссылки:

<script src="@Url.Content("~/Scripts/jquery-1.6.2.min.js")" type="text/javascript"></script> 

<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> 
+0

Почему вы вызываете '$ (" # addCategoryForm "). Validate(). Valid()'? представление формы должно подтвердить входные данные. Или есть некоторые недостающие js в вопросе? – Liam

+1

Я открываю свой сайт в google chrome и пишу его в консоли – Maris

+0

Я думаю, что ваш js ошибочен, попробуйте '$ (" # addCategoryForm "). Valid()' – Liam

ответ

1

ли вы добавить JS-файлы в правильном порядке?

<script src="/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script> 
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script> 
<script src="/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script> 

И в WebConfig:

<appSettings> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
+0

Все ссылки были добавлены! – Maris

+0

У вас есть что-то например, «if (ModelState.IsValid)» в postback-действии, чтобы выполнить проверку? –

+0

Я не делал никакого запроса на стороне сервера. Проблема заключается в проверке на стороне клиента. – Maris

-1

Снимите следующие с вашей точки зрения

$("#addCategoryForm").validate().valid() 
Html.EnableUnobtrusiveJavaScript(); 
Html.EnableClientValidation(); 
@Html.ValidationSummary(false) 

Добавьте следующие JS-файлы на ваш взгляд:

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

Использование

<button type="submit">Create</button> 

вместо

<input type="submit" value="Create" />

добавить веб-часть конфигурации, как описано @Lasse. Это приведет к ошибке проверки валидации модели валидации, если таковая имеется.

+0

Я хочу отправьте форму, хотя Ajax не представляет собой простую форму! – Maris

+0

Я хочу, чтобы в любой момент вы вызывали проверку jquery! – Maris

+0

@Maris можете ли вы более подробно рассказать о своей проблеме связанные с ajax? –