0

私は「ES-MX」文化とasp.net MVCアプリケーションを持っています。ここで私は私のweb.configファイルで持っているものです。剣道日付ピッカーグローバリゼーションバインディング問題

@(Html.Kendo().DatePickerFor(model => model.StartDate) 
    .HtmlAttributes(new { @class = "input-field" }) 
) 
:私はこのような剣道日付ピッカーを持って

<script type="text/javascript"> 
    $(function() { 
     //set current to the "es-MX" culture script 
     kendo.culture("es-MX"); 
    }) 
</script> 

<globalization enableClientBasedCulture="true" uiCulture="es-MX" culture="es-MX"></globalization> 

そして、ここで私は私の_layoutページに持っているものです

フォームをコントローラにポストバックすると、StartDateフィールドはnullになります。

ここで私は、サーバーから取得レスポンスです:

"エラー":{ "開始日":{ "エラー":[ "値の\ u002707/2016分の10午前12時00分00秒 午前""}}}

ところで、サーバーに送信されるリクエストのAccept-Languageは "en-US"です。これは奇妙なものです。

UPDATE:

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

     if (string.IsNullOrWhiteSpace(value.AttemptedValue)) 
      return null; 

     DateTime dateTime; 
     var isDate = DateTime.TryParse(value.AttemptedValue, Thread.CurrentThread.CurrentUICulture, 
      DateTimeStyles.None, out dateTime); 

     if (!isDate) 
     { 
      bindingContext.ModelState.AddModelError(bindingContext.ModelName, "La fecha es válido."); 
      return DateTime.UtcNow; 
     } 

     return dateTime; 
    } 
} 

しかし、それは問題のように見えるに渡された日付の時間の一部であると私はこのように、DateTimeのためのカスタムモデルバインダーを使用しようとした

コントローラ。値「07/10/2016 12:00:00 a. m.」は、「es-MX」および「en-US」カルチャのいずれの日付でも認識されません。一目で

+0

07/10/2016は、es-MX(10月7日)とen-US(7月10日)の両方で有効な日付である必要があるため、この問題は文化に関連しているとは思わない –

+0

@AndrésNava-.NET、私は知っていますが、web.configファイルと_Layoutページからes-MXカルチャを削除しても問題はありません。しかし、私がDatePickerのcultureをen-USに変更しただけでは、それはまだバインドされません。 – ataravati

+0

@AndrésNava-.NETについては、私の更新をご覧ください。 – ataravati

答えて

0

私は、問題が何であったか考え出し。 documentationによれば、剣道UIカルチャースクリプトは、のWindows 8フォーマットに基づいて生成されます。私は、スクリプトが現在の.NETまたは指定したカルチャに基づいて生成されていることを確認するために、ページの上部にこの文化ヘルパーを置く必要があるでしょう、だから、Windows 7を使用しています:

@Html.Kendo().Culture() 

このヘルパーなしでサーバーに投稿された日付は07/10/2016 12:00:00 a. m.(aとmの間のスペースに注意してください)のようになり、それは私のMVCがそれらをバインドすることができません。ヘルパーを使用した後、日付は07/10/2016 12:00:00 a.m.(スペースなし)のようになります。

0

、エラー・メッセージは、無効な日付フォーマットがモデルに渡された指示:

"エラー":{ "開始日":{ "エラー":[ "値の\ u002707/10/2016 12時00分○○秒 午前の\ u0027はFechaデINICIOには有効ではありません。エラー "]}}

提供JSON形式からUnicodeの変換を考慮することにより、メッセージが

として取り出すことができます" ":{"開始日":{" errors ":[" '07/10/2016 12:00:00の値。 m。 ' FechaデINICIOために有効ではありません。」]}}

'07/10/2016 12:00:00 a. m.' AM/PMの状態を有する時間部分がないので、あなたのmodel.StartDate戻りヌルしたがって、文字列の代わりに、認識可能なDateTime値として渡された日付形式を示し有効DateTimeまたはNullable<DateTime>

あなたのビューにグローバル化スクリプトを設定してみてください:。

@section HeadContent 
{ 
    <script src="@Url.Content("~/Scripts/kendo.all.min.js")"></script> 
    <script src="@Url.Content("~/Scripts/cultures/kendo.culture.es-MX.min.js")"></script> 
} 

やレイアウトページ:

<head> 
<script src="@Url.Content("~/Scripts/kendo.all.min.js")"></script> 
<script src="@Url.Content("~/Scripts/cultures/kendo.culture.es-MX.min.js")"></script> 
</head> 

NB:あなたの剣道JSのディレクトリパスに~/Scripts/cultures/を変更します。

まだ動作しません上記の試み(s)は、DatePickerFor上の表示形式の文字列を設定した場合:

@{ 
    Culture = "es-MX"; 
} 

@(Html.Kendo().DatePickerFor(model => model.StartDate) 
    .Name("StartDate") 
    .Culture("es-MX") 
    .Format("dd/MM/yyyy") 
    .ParseFormats(new String[] { "dd/MM/yyyy" }) 
    .HtmlAttributes(new { @class = "input-field" }) 
) 

または(How to valid date format dd.MM.yyyy KENDO MVCでエディンMahmutovicの回答から適応)このよう日付入力用のカスタムルールを追加することによって:

kendo.ui.validator.rules.mvcdate = function (input) { 
    if ($(input.attr('name')) === 'StartDate') { 
     return input.val() === "" || kendo.parseDate(input.val(), "dd/MM/yyyy") !== null; 
    } 
    return true; 
} 

私の知る限りでは、特定の日付の書式文字列をFormat方法により設定されていないとき、それは、この例に示されているデフォルトのフォーマットを使用:http://demos.telerik.com/aspnet-mvc/datepicker/index

関連問題:

Kendo datepicker acting weired for different computers on two different timezone

Kendo DatePicker culture not working correctly

http://www.telerik.com/forums/wrong-format

グローバリゼーション参照:http://docs.telerik.com/kendo-ui/aspnet-mvc/globalization

+0

私は正しい形式で日付を表示することに問題はありません。問題は、サーバーに送信された日付にあります。私はすでに問題が何かを発見しました。私の答えをチェックしてください。 – ataravati

関連する問題