0

私は実稼働環境で作業しています。問題は、DOBフィールドにmvcモデル検証が提供され、ビューでjquery.validate.unobtrusive.jsがフォームの検証に使用されることです。MVCモデルの検証に失敗しました - 日付は有効な日付でなければなりません

Date Pickerを使用して日付を選択すると、フォームを送信するとModelState.IsValidが失敗します。

コードを以下に示します。これはChromeでは正常に動作しますが、他のブラウザでは正常に動作しません。私のモデルでは

は:私のコントローラで

$('#datetimepicker2').datetimepicker({ 
     format: 'MM/DD/YYYY',   
     maxDate: new Date() 
    }); 

if (ModelState.IsValid) 
    { 
     ///some action 
    } 
これは私の日付ピッカーで

<div class="col-md-6"> 
    <div class="col-xs-12"> 
     <label>DATE OF BIRTH<p>*</p></label> 
    </div> 
    <div class="col-xs-12"> 
     <div class="form-group"> 
      <div class="input-group" id="datetimepicker2"> 
       @Html.TextBoxFor(d => d.DOB, new { @class = "form-control input-validation-error" }) 
       <span class="input-group-addon"><span class="icon-small-calendar"></span></span> 
       </div> 
      @Html.ValidationMessageFor(m => m.DOB) 
      </div> 
    </div> 
</div> 

[Required(ErrorMessage = "Please enter DOB")] 
[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)] 
public Nullable<System.DateTime> DOB { get; set; } 

これが私の見解です私のweb.configファイルで

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

誰かが事前 で

おかげTarak

+0

ます。https:

if (!$.validator) { return; } // Tell the validator that we want dates parsed using Globalize $.validator.methods.date = function(value, element) { // parse the value parameter into a Date datatype using your own logic or that of a framework like JQuery Globalize. In the example, I used JQuery Globalize var parsedValue = Globalize.parseDate(value, $.validator.methods.dateGlobalizeOptions.dateParseFormat);. return this.optional(element) || (parsedValue instanceof Date); }; 

また、サーバー側のカスタムのDataBinderを実装する必要があります: //stackoverflow.com/questions/28114874/html-displayfor-dateformat-mm-dd-yyyy助けてもらうことができます –

答えて

0

すべてのブラウザのために、この問題を解決する方法を私を助けることができます通常、エラー「日付が有効な日付である必要があります"は、JQueryの検証フレームワークによってクライアント側(ブラウザ内)で生成されます。このような場合は、検証に使用するJavaScriptメソッドをオーバーライドする必要があります。そうするためには、クライアント側でJavaScriptの生命維持、あなたはそのような何かを追加することができます。

public class DateTimeModelBinder : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).AttemptedValue; 

     object result = null; 
     if (value != null) 
     { 
      result = DateTime.ParseExact(value, "MM/DD/YYYY", CultureInfo.InvariantCulture, DateTimeStyles.None);     
     } 

     return result; 
    } 
} 
//and in global.asax.cs add 
ModelBinders.Binders.Add(typeof(Datetime), new Binders.DateTimeModelBinder()); 
+0

@Tarak私は提案したようにglobal.asax.csを編集しました。ありがとうございました。 –

関連する問題