2012-04-23 28 views
0

テキストエリアが空白の場合でも、私のフォームはアクションに投稿します。ポストアクションでは、これをnullにします。MVC3 - クライアント側の検証

また、DI、リポジトリ、サービスアーキテクチャがあります。

私は以下のことに従いましたが、まだ運がありません。

ビジネスエンティティ2に続いて

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; } 
     } 
    } 
} 

をレイアウト

<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> 
で参照されています。ここでは

MVC3 client validation not working

は私がこれまで持っているものです

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

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

を交換しますレンダリングされたHTMLまたは実際のHTMLということですか? –

+0

メタデータクラスをプライベートネストされたクラスとして持つことで、コンパイルしても驚いています。 –

+0

これはhtmlにレンダリングされます。 –

答えて

0

動作します。どちらか最新のものか

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

No. 私はそれを公開に変更しましたが、それでも同じ影響があります。 また、私は現在2項目を除外しています。私は、レンダリングされたHTML、FICEを見て、AnnualReportYearは値を持っているが、これらはnullとして投稿し、0は [たmetadataType(typeof演算(AnnualReportMessageMetaData))] 公共部分クラスAnnualReportMessage { [バインド(=「AnnualReportYear、FICEを除外する場合")] public class AnnualReportMessageMetaData { [必須(ErrorMessage ="メッセージは空ではありません ")] public string Message {get;セット; } } } –

+0

メタデータの変更を行い、ネストされたメタデータクラスを公開しましたが、それでもやはり同じことをしています。私が今混乱しているもう一つの事は です。なぜ私は2番目の隠しフィールドが必要になっているのですか? 2.バインドされているアイテムは除外され、必要に応じて他のものがレンダリングされる場所では不要なものとしてレンダリングされます。 3.投稿されたフォームでは、Message_Ficeはnullで、MEssage_AnnualReportYearは0で、両方に値があります。 –

+0

[たmetadataType(typeof演算(AnnualReportMessage.AnnualReportMessageMetaData))] 公共部分クラスAnnualReportMessage { [バインド(= "AnnualReportYear、FICE" を除外)] パブリッククラスAnnualReportMessageMetaData { [必須(にErrorMessage = "メッセージは、空にすることはできません" )] パブリック文字列メッセージ{get;セット; } } } –

0

これを使用してください。 mvc 3カミソリのデフォルトのバリデーションメソッドが削除されます。

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

その後、ウルjqueryの検証コードは、それが問題を持っていたjquery.validate.jsた

+0

いいえ、IE 8は動作しませんでした。 FFとIE9、これらは検証メッセージを示し、フォームも投稿しました。 –

関連する問題