2012-04-23 4 views
0

Моя форма сообщения к действию, даже если текстовое поле пуста. В post post я получаю это как null.MVC3 - проверка на стороне клиента

Кроме того, у меня есть DI, репозиторий и сервисная архитектура.

Я следил за следующим и все еще не повезло.

MVC3 client validation not working

Вот что я до сих пор:

Бизнес Entity

namespace Intranet.BusinessEntities 
{ 
    public partial class AnnualReportMessage 
    { 
     public string Message { get; set; } 
     public int AnnualReportYear { get; set; } 
     public string Fice { get; set; } 
    } 
} 

**Following is in Validations Folder** 

using System.ComponentModel.DataAnnotations; 

namespace Intranet.BusinessEntities 
{ 
    [MetadataType(typeof(AnnualReportMessageMetaData))] 
    public partial class AnnualReportMessage 
    { 
     private class AnnualReportMessageMetaData 
     { 
      [Required] 
      public string Message { get; set; } 
     } 
    } 
} 

После 2 упоминаются в макете

<script type="text/javascript" src="@Url.Script("jqueryMain/jquery.validate.js")"></script> 
<script type="text/javascript" src="@Url.Script("jqueryMain/jquery.validate.unobtrusive.min.js")"></script> 

Wen.config (в глобальном, а не удельная площадь)

<add key="ClientValidationEnabled" value="true"/> 
     <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 

HTML на странице, я только сделал «Сообщение» требуется, почему я вижу валидации для других областей?

<form action="/Sales/AnnualReportNote" id="AnnualReportMessage" method="post"> 
    <input name="__RequestVerificationToken" type="hidden" value="Q65zfJU+oSODE+qLj0Q0UpfaTId+ENEr+jucyhjWLbk1gnxY0QuTpu7R/lYOGtSxOYJwQkiPryCzgiTekyGikT/YrLQjF6hZXBhKkSF+UVzeAX2PuDrRoJR0pmWf5thL05LlAidHJtRcC3SHHGbxce5dqHSd1zIFpdQfQ3HPu10eUh55jMD4bn0cZeLReJ4P" /> 
    <input id="Fice" name="Fice" type="hidden" value="XXXXXX" /> 
    <input data-val="true" data-val-number="The field SetupYear must be a number." data-val-required="The SetupYear field is required." id="SetupYear" name="SetupYear" type="hidden" value="2012" /> 
    <input data-val="true" data-val-number="The field AnnualReportYear must be a number." data-val-required="The AnnualReportYear field is required." id="Message_AnnualReportYear" name="Message.AnnualReportYear" type="hidden" value="2012" /> 
    <input id="Message_Fice" name="Message.Fice" type="hidden" value="XXXXXX" /> 

    <textarea cols="70" data-val="true" data-val-required="The Message field is required." id="Message_Message" name="Message.Message" rows="12"> 
    </textarea>  

    <div class="distanceBottom"><span class="field-validation-valid" data-valmsg-for="Message.Message" data-valmsg-replace="true"></span></div> 

    <input type="image" src="/App_Themes/Main/Images/ResponseAction/Buttons/btn_submit.gif" class="distanceTop" alt="Submit" id="SubmitButton" /> 
</form> 

JavaScript

formSubmit: function ($form, currentForm) { 
     if ($form.validate().form()) { 
      var $button = $("#" + AnnualReportSpecialEcMessage.enums.submitButtonId); 

      jMessage("Processing request...", $button, true, false); 
      $.ajax({ 
       cache: false, 
       url: currentForm.action, 
       type: currentForm.method, 
       data: $form.serialize(), 
       error: function (xhr, ajaxOptions, thrownError) { 
        jMessageError(xhr.responseText, $button, false, true); 
       }, 
       success: function (result) { 
        if (result.IsError) { 
         jMessageError(result.Message, $button, false, true); 
        } 
        else { 
         jMessageOK(result.Message, $button, false, false); 
         jMessageHideInterval(3000); //hide after 3 seconds 
        } 
       } 
      }); 
     } 
    } 

Я-то здесь отсутствует?

+0

Это тонированное HTML или фактический HTML? –

+0

Я очень удивлен, что он даже компилируется, имея классы метаданных как частный вложенный класс. –

+0

Это визуализируется html. –

ответ

0

Это было jquery.validate.js, что была проблема. Либо получить последние один или

Заменить

return $([]).add(this.currentForm.elements) 
.filter(":input") 

С

return $(':input', this.currentForm) 

Полный рабочий кусок

elements: function() { 
      var validator = this, 
       rulesCache = {}; 

      // select all valid inputs inside the form (no submit or reset buttons) 
      // workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved 
      //return $([]).add(this.currentForm.elements) 
      //.filter(":input") 
      return $(':input', this.currentForm) 
      .not(":submit, :reset, :image, [disabled]") 
      .not(this.settings.ignore) 
      .filter(function() { 
       !this.name && validator.settings.debug && window.console && console.error("%o has no name assigned", this); 

       // select only the first element for each name, and only those with rules specified 
       if (this.name in rulesCache || !validator.objectLength($(this).rules())) 
        return false; 

       rulesCache[this.name] = true; 
       return true; 
      }); 
     }, 
0

Я думаю, что вам нужно будет сделать это:

[MetadataType(typeof(AnnualReportMessage.AnnualReportMessageMetaData))] 

У вас случайно есть другой класс AnnualReportMessageMetaData?

+0

№ Я изменил его на публичный, но все тот же эффект. Кроме того, я теперь исключаю 2 предмета. Когда я смотрю на оказанной HTML, FICE и AnnualReportYear имеют значение, но они размещать утратившим 0. [MetadataType (TypeOf (AnnualReportMessageMetaData))] общественного частичного класса AnnualReportMessage { [Bind (Exclude = «AnnualReportYear, FICE ")] Публичный класс AnnualReportMessageMetaData { [Обязательно (ErrorMessage =" Сообщение не может быть пустым ")] public string Message {get; задавать; } } } –

+0

Я изменил метаданные, а также сделал класс вложенных метаданных общедоступным, но он все еще делает то же самое. Еще одна вещь, с которой я теперь запутался, - это 1. Почему мне требуется второе скрытое поле. 2. Элементы, которые являются связующими, исключают, один получает визуализацию как не требуемую, когда другая визуализируется по мере необходимости. 3. В опубликованной форме Message_Fice имеет значение null, а MEssage_AnnualReportYear - 0, где оба значения имеют значения. –

+0

[MetadataType (TypeOf (AnnualReportMessage.AnnualReportMessageMetaData))] общественного частичного класса AnnualReportMessage { [Bind (Exclude = "AnnualReportYear, FICE")] общественного класса AnnualReportMessageMetaData { [Требуется (ErrorMessage = "Сообщение не может быть пустым")] public string Message {get; задавать; } } } –

0

Используйте это. Он удалит метод проверки по умолчанию в бритве mvc 3.

$(document).ready(function() { 
    var form = $('#formId').get(0); 
    $.removeData(form, 'validator'); 
}); 

затем ур код проверки JQuery будет работать

+0

Нет, IE 8 не вел себя. FF и IE9, они показали подтверждение и отправили форму. –

Смежные вопросы