2017-09-06 2 views
0

MVC5 asp.netプロジェクトでフォーマットの日付dd/MMM/YYYYを使用する際に問題があります。ほとんどの場合、yyyy/mm/ddという形式の日付しか受け入れられないように見えるため、Chromeについては、HTML5フォーマットの日付dd/MMM/YYYY

ブラウザ間で動作を正規化するには、jquery datetimepickerコンポーネントを使用しています。

多くのことを試しましたが、Chromeはまだ日付が有効ではないと言っています。後で入力を日付の代わりにテキストとして定義する。

また、特定のコンポーネント(data-val = "false")の検証を無効にしても、Chromeは日付を無効としてマークすることを主張しています。

モデル:

public class order 
{ 
    [Key] 
    public int orderID { get; set; } 

    [Required] 
    public string comments { get; set; } 

    [Required] 
    [DisplayFormat(DataFormatString = "{0:dd/MMM/yyyy}", ApplyFormatInEditMode = false)] 
    [Display(Name = "Date of Shipping")] 
    public DateTime date { get; set; } 
} 

表示日付入力:

<div class="form-group"> 
    @Html.LabelFor(model => model.date, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.EditorFor(model => model.date, new { htmlAttributes = new { @class = "form-control datetimepicker" } }) 
     @Html.ValidationMessageFor(model => model.date, "", new { @class = "text-danger" }) 
    </div> 
</div> 

輸入:

<script src="https://code.jquery.com/jquery-3.2.1.js"/script> 
<link rel="stylesheet" type="text/css" href="~/Content/jquery.datetimepicker.min.css" /> 
<script src="~/Scripts/jquery.datetimepicker.full.min.js"></script> 

Javascriptを:

<script type="text/javascript"> 
    jQuery.datetimepicker.setLocale('es'); 

    jQuery('#date').datetimepicker({ 
     format: 'd/M/Y', 
    }); 
</script> 
+0

'[データ型(DataType.Date)]'と '[displayFormatに(DataFormatString = "{0:DD/MMM/YYYY}"、ApplyFormatInEditMode = true)] 'jquery datepickerを使用している場合は意味がありません(そして' new {@type = "text"} 'を取り除くことができます –

+0

クライアント側のエラーが発生した場合、' jquery.validate'は'MM/dd/yyyy'形式です。あなたの書式で日付を受け入れるようにバリデータを再設定する必要があります。 –

+0

'@type =" text "'を削除します - この属性は無関係です。また、datetimepickerのフォーマットは間違っているようです。これは '$( '#date')とdatetimepicker({format:" DD/MMM/YYYY "})'です。そして、クライアント側の検証を以下のように設定します: '$。validator.methods.date = function(value、element){return this.optional(element)|| $ .datetimepicker.parseDate( 'DD/MMM/YYYY'、value); } ' –

答えて

0

は、私は最終的に問題を解決することができました:あなたは、あなたのページに参​​照し、その後、NutGetマネージャを使用して追加することができ、あなたのプロジェクトにmoment.jsを追加する必要が-Fisrt

@Scripts.Render("~/Scripts/moment-with-locales.min.js") 

非常に重要なのは、英語以外の形式で日付を扱う場合は、あなたが、いないかのように瞬間-と-ロケールをインポートするためにも、変更のロケールの後に、それが「エン」として滞在する必要がある

-Then次のJavaスクリプトコードを追加:

$.datetimepicker.setDateFormatter({ 
    parseDate: function (date, format) { 
     var d = moment(date, format); 
     return d.isValid() ? d.toDate() : false; 
}, 

formatDate: function (date, format) { 
    return moment(date).format(format); 
    } 
}); 

$.validator.methods.date = function (value, element) { 
    return this.optional(element) || moment(value, "DD/MMM/YYYY", 'es').isValid(); 
} 
0次のように

そのDateTimePickerの初期設定の変更を注意-Also:持つ

jQuery('#date').datetimepicker({ 
    format: 'DD/MMM/YYYY HH:mm', 
    formatTime: 'HH:mm', 
    formatDate: 'DD/MMM/YYYY' 
}); 
関連する問題