2017-07-06 3 views
0

問題: グローバル化を使用してドイツ語形式で日付を表示したいとします。 MVc 5 - validation german date with unobtrusiv js - a simple approachに記載されているソリューションでは、IEとFirefoxで動作します。問題ありません。MVC:Chromeブラウザの日付

Google Chromeは入力タイプ「日付」を使用しており、日付ピッカーを表示します。検証はこれまでに失敗しました。

私は新しい、マップされていないプロパティを導入モデルでは:私は、このソリューションに来たのstackoverflowで、ここでの回答の多くを読んだ後

答えて

0

... 
    [NotMapped] 
    [DataType(DataType.Date)] 
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
    public DateTime GeburtsdatumChromeEdit 
    { 
     get { return this.Geburtsdatum; } 
     set { this.Geburtsdatum = value; } 
    } 
... 

これはdataannotiationを追加する必要があるDisplayFormat Chromeが望む形式で値を元のプロパティにパイプします。

<div class="date4Normal"> 
     @*Tut nicht in Chrome, da dieser dann einen Input vom Type "Date" verwendet und dieser verlangt dann ein Normdatum yyyy-mm-dd*@ 
     @Html.EditorFor(model => model.Geburtsdatum) 
     @Html.ValidationMessageFor(m => m.Geburtsdatum, String.Empty, new {@class = "text-danger"}) 
    </div> 
    <div class="date4Chrome"> 
     @Html.EditorFor(model => model.GeburtsdatumChromeEdit) 
     @Html.ValidationMessageFor(m => m.GeburtsdatumChromeEdit, String.Empty, new { @class = "text-danger" }) 
     @*@Html.TextBoxFor(model => model.Geburtsdatum, "{0:dd.MM.yyyy}") 
     @Html.ValidationMessageFor(m => m.Geburtsdatum, String.Empty, new { @class = "text-danger" })*@ 
    </div> 

私はstackoverflowの上で見つかった機能(How can I tell if a browser supports <input type='date'>)では、実際のブラウザが使用している場合、私は検出することができます:私は日付の入力を倍増し、特別なクラスでのdivのことで2つのグループをカプセル化されたビューで

日付入力:

Iは、入力ブロックを削除し、次の機能では、私は必要はありません。

function switchForChrome() { 
     var isChrome = checkDateInput(); 
     if (isChrome) { 
      $('.date4Normal').remove(); 
     } else { 
      $('.date4Chrome').remove(); 
     } 
    }; 

$(document).ready関数では、私はswitchForChrome();を呼び出します。

この時点では動作するようですが、日付の検証は失敗しました。

if (checkDateInput()) { 
    $.validator.addMethod('date', 
     function (value, element) { 
      return true; 
    }); 
} 

をそして最後に、それは動作します:

は、だから私は(ASP.NET MVC 4 avoid generation of data-val-date for datetime)を回避するためにいくつかのコードを追加します。 私は元のプロパティ(Geburtsdatum)を使用するので、言語固有のフォーマットを取得し、元のプロパティ(IE、Firefox)または新しいプロパティGeburtsdatumChromeEdit(Chrome、Opera)を編集します。

0

前回の回答で助けになるかもしれませんが、私のように日付フィールドの情報を使ってプロセスカウントをすると、この問題を解決する正しい方法と将来の問題はないあなたは、あなたのGlobal.asaxのを変更し、次の設定を追加する必要が

が、それはすべてのあなたの日付フォーマットを書き換えますと、サーバー上で持っているものをすべて無視することを念頭に置いていthisポストに@RAVI VAGHELAで与えられますですので、ご注意ください

protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
      var newCulture = (CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone(); 
      newCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"; 
      newCulture.DateTimeFormat.DateSeparator = "-"; 
      Thread.CurrentThread.CurrentCulture = newCulture; 
     } 

注:この方法は、紺色の(西ヨーロッパの)ローカルサーバー(英語のWindowsサーバー2012)およびローカル(Windows 10のiisエクスプレス)でテストされています。他の言語または地域でこのメソッドに関する問題がある場合はお知らせください。

+0

残念しかし、私は理解していません、あなたは "あなたは日付フィールドの情報を使ってプロセスを数えます"ということを意味します。 – PBum

+0

たとえば、ユーザーが指定した日付と年齢のパラメータに基づいて子供のFPP(生まれた年齢)を計算する必要がある場合 – sGermosen

関連する問題