2017-05-06 8 views
8

を日付形式を指定し、私はこの形式で入力日付を促すたい:DD/MM/YYYY私は日付値のユーザー入力を処理しようとしている(DD/MM/YYYY)MVC5で

何私が実行しようとしました:

私が読んで、この質問にダーリンのための答えを実装: Format datetime in asp.net mvc 4

これは私の実装です:

のGlobal.asaxで

モデルで
(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var displayFormat = bindingContext.ModelMetadata.DisplayFormatString; 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 

     if (!string.IsNullOrEmpty(displayFormat) && value != null) 
     { 
      DateTime date; 
      displayFormat = displayFormat.Replace 
      ("{0:", string.Empty).Replace("}", string.Empty); 
      if (DateTime.TryParse(value.AttemptedValue, CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) 
      { 
       return date; 
      } 
      else 
      { 
       bindingContext.ModelState.AddModelError(
        bindingContext.ModelName, 
        string.Format("{0} is an invalid date format", value.AttemptedValue) 
       ); 
      } 
     } 

     return base.BindModel(controllerContext, bindingContext); 
    } 

出発日:ビューで

[Required(ErrorMessage = "Departure date is required")] 
     [Display(Name = "Departure Date")] 
     [DataType(DataType.Date)] 
     [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
     public DateTime DepartureDate { get; set; } 

enter image description here

それは(ミリメートル月から始まる:

<div class="col span-1-of-2"> 
          @Html.LabelFor(m => m.DesignVacation.DepartureDate) 
          @Html.EditorFor(m => m.DesignVacation.DepartureDate) 

         </div> 

は、そして、これは、ビューを実行して出力されます)しかし、私が望むのはこのフォーマットです: dd/MM/yyyy

editorForを使用してこの形式を取得する方法(および可能であればtextboxForで)。

答えて

3

あなたがDisplayFormatAttribute.DataFormatString Propertyの文書を見れば、あなたは

は、フィールド値の表示形式を取得または設定します表示されます。

のデザインフォーマットが変更されることは記載されていません。値のフォーマットのみを変更します。あなたはHTML 5 date pickerから日付を取得しているので、あなたには、いくつかのブラウザがHTML 5 date pickerをサポートしていませんが、あなたがhead

<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> 
<script src="https://code.jquery.com/jquery-1.12.4.js"></script> 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 

body

@Html.TextBoxFor(m => m.DesignVacation.DepartureDate) 
中でこれを追加し jquery date picker

を使用することができますもIs there any way to change input type=“date” format? その形式を変更することができず、

、最後にscript

<script> 

    $(function(){ 

     $('#DesignVacation_DepartureDate').datepicker({ 
     dateFormat: 'dd/mm/yy' 
    }); 

}); 

</script> 
6

EditorFor()[DataType][DisplayFormat]という属性を組み合わせて、ブラウザのHTML5の日付ピッカーを生成しています。仕様では、形式がyyyy-MM-dd(ISO形式)であることが必要です。属性を変更します。

[Required(ErrorMessage = "Departure date is required")] 
[Display(Name = "Departure Date")] 
[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
public DateTime DepartureDate { get; set; } 

と日付がHTML-5日付ピッカーが何のためにあるのかであるユーザーのデバイスの文化に表示されます。

カスタムモデルバインダーは必要ありません(日付はISO形式で掲載され、DefaultModelBinderで正しくバインドされます)。

ただし、HTML-5のdatepickerはChromeとEdgeでのみサポートされており、通常のテキストボックスはFirefoxなどで表示されます(例:)。一貫性のあるUIが必要な場合は、jqueryのdatepickerプラグイン(例jquery-UI)を使用することをお勧めしますが、クライアント側の検証のためにバリデータを再設定する必要があります(例についてはthis answerを参照してください)。

関連する問題