1

我正在使用 Microsoft Ajax ToolkitCalendarExtender控件,将日历下拉功能添加到常规文本框:

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

这适用于大多数客户端语言环境。似乎该控件执行服务器请求以将 aDateTime转换为本地化的String.

例如,今天(2012 年 10 月 1 日)在阿拉伯语中显示良好15/11/33

在此处输入图像描述

并且在下索布语中也显示良好1. 10. 2012

在此处输入图像描述


但是某些语言环境在 .NET 中无法正确显示 1////10////2012

在此处输入图像描述

在这种情况下,我需要某种OnFormatDate事件,我可以将日期的正确本地化提供给字符串。这导致了我的问题:

如何覆盖 AjaxToolkit CalendarExtender 日期到字符串的转换?


注意:不要将问题与示例混淆。

  • 我在问如何自定义日期到字符串的转换CalendarExtender
  • 即使我没有处理 .NET 中的错误,它也不会改变我的问题
  • 即使我不处理 a CalendarExtender,我仍然在问这个问题
4

2 回答 2

1

在你的页面......在它的顶部......你有类似的东西:

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

添加类似的东西(例如西班牙语)......

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

在你的脚本管理器中

EnableScriptLocalization="true" EnableScriptGlobalization="true"

几乎会覆盖本地设置...

但我猜你只想在 CalendarExtender 中设置这个属性:

Format="yyyy-MM-dd"或者Format="dd/MM/yyyy" 或者你喜欢的...

于 2012-10-01T17:29:36.427 回答
0

我使用了与本机 Win32 应用程序相同的解决方案。

使用CalendarExtender短日期”格式 ( d)。修复是解决 .NET 中的错误:

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 回答