1

Microsoft Ajax ToolkitCalendarExtenderコントロールを使用して、通常のTextBoxにカレンダーのドロップダウン機能を追加しています。

<asp:TextBox ID="edStartDate" runat="server" />
<asp:CalendarExtender ID="CalendarExtender1" runat="server" 
      TargetControlID="edStartDate" />

これは、ほとんどのクライアントロケールで正常に機能します。コントロールは、DateTimeをローカライズされたに変換するためにサーバー要求を実行しているようStringです。

たとえば、今日(2012年10月1日)はアラビア語で正常に表示されます15/11/33

ここに画像の説明を入力してください

また、低ソルブ語でも問題なく表示されます1. 10. 2012

ここに画像の説明を入力してください


ただし、一部のロケールは.NETで正しく表示されません 1////10////2012

ここに画像の説明を入力してください

OnFormatDateこの場合、文字列に日付の正しいローカリゼーションを提供できる、ある種のイベントが必要です。これは私の質問につながります:

AjaxToolkit CalendarExtenderの日付から文字列への変換をオーバーライドするにはどうすればよいですか?


注:質問と例を混同しないでください。

  • 日付から文字列への変換をカスタマイズする方法を尋ねていますCalendarExtender
  • .NETのバグを扱っていなくても、質問は変わりません。
  • 私が扱っていない場合でもCalendarExtender、私はまだ質問をしています
4

2 に答える 2

1

あなたのページで...その上部に...あなたは次のようなものを持っています:

<%@ Page Language="C#" AutoEventWireup="true" %>

そこに次のようなものを追加します(たとえばスペイン語)...

<%@ Page Language="C#" AutoEventWireup="true" UICulture="es" Culture="es-MX" %>

そしてあなたのscriptmanagerで

EnableScriptLocalization="true" EnableScriptGlobalization="true"

ローカル設定をかなり上書きします...

しかし、CalendarExtenderでこのプロパティを設定するだけでよいと思います。

Format="yyyy-MM-dd"またはFormat="dd/MM/yyyy" またはあなたが好きなように...

于 2012-10-01T17:29:36.427 に答える
0

ネイティブのWin32アプリケーションで使用したのと同じソリューションを使用しました。

「短い日付」形式( )CalendarExtenderを使用します。修正は、.NETのバグを回避することです。d

String format = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;

format = FixDotNetDateTimeFormatStringsBug(format);

CalendarExtender1.Format = format; //starts as "d", the "Short date" format

私たちのヘルパー-フィクサーで:

public String FixDotNetDateTimeFormatStringBug(String format)
{
   //The bug in .NET is that it assumes "/" in a date pattern means "the date separator".
   //What .NET doesn't realize is that the locale strings returned by Windows
   // are the *Windows* format strings. 
   //The bug is exposed in locale's that use two slashes as for their date separator:
   //      dd//MM//yyyy
   //Which .NET misinterprets to give:
   //      30////11////2011
   //when really it should be taken literally to be:
   //      dd'//'MM'//'yyyy
   //which is what this fix does:

   return = format.Replace("/", "'/'");
}

または、もっと簡潔に好きな場合:

CalendarExtender1.Format = FixDotNetDateTimeFormatStringsBug(
      CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern);

:すべてのコードはパブリックドメインにリリースされます。アトリビューションは必要ありません。

于 2012-10-01T17:54:08.087 に答える