gpt4 book ai didi

asp.net - ASP.NET 日历控件中的各种日历

转载 作者:行者123 更新时间:2023-12-02 00:21:03 24 4
gpt4 key购买 nike

我需要创建一个显示日历控件的 ASP.NET 页面,该控件根据下拉列表中选择的值显示特定的日历。目前我需要显示希伯来日历和常规(公历)日历,但将来我可能需要其他日历。当然,我无法使用 Windows 的区域设置或 web.config 中的全局化定义,因为所需的日历是在运行时设置的。如何在 Calendar 控件中显示各种日历?

谢谢!

最佳答案

诀窍是您需要设置当前线程的文化,并且(对于希伯来语等某些语言环境)还需要在该文化中设置日历。

下面的独立代码示例说明了如何执行此操作。这种方法当然可能会影响其他控件的本地化文本。如果这是一个问题 - 并且您只想本地化日历控件并将其余部分保留为英语 - 那么您可以执行以下操作:

  • 从 ASP.NET 的 Calendar 控件派生一个类并重写 Render() 方法。
  • 在 Render() 实现中,保存当前线程的区域性/UICulture,然后使用下面的代码重置当前线程的区域性和日历,然后调用基类的 Render(),然后恢复当前线程的区域性/UICulture当前线程
  • 在您的 ASPX 页面中使用该类,而不是常规的 ASP.NET 日历。

代码如下:

<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Globalization"%>
<%@ Import Namespace="System.Threading"%>
<%@ Import Namespace="System.Collections.Generic"%>
<html>
<body>
<form id="form1" runat="server">
Choose a language and calendar: <asp:DropDownList ID="LocaleChoice" runat="server" AutoPostBack="true">
<asp:ListItem Value="en-US" Selected="True">English</asp:ListItem>
<asp:ListItem Value="es-MX">Español</asp:ListItem>
<asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
<asp:ListItem Value="he-IL|HebrewCalendar">Hebrew (Hebrew Calendar)</asp:ListItem>
<asp:ListItem Value="he-IL|GregorianCalendar">Hebrew (Gregorian Calendar)</asp:ListItem>
<asp:ListItem Value="ar-SA|HijriCalendar">Arabic (Hijri Calendar)</asp:ListItem>
<asp:ListItem Value="ar-SA|GregorianCalendar">Arabic (Gregorian Calendar)</asp:ListItem>
</asp:DropDownList><br /><br />
<asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
</form>
</body>
</html>
<script runat="server">

Dictionary<string, System.Globalization.Calendar> Calendars =
new Dictionary<string, System.Globalization.Calendar>()
{
{"GregorianCalendar", new GregorianCalendar()},
{"HebrewCalendar", new HebrewCalendar()},
{"HijriCalendar", new HijriCalendar()},
{"JapaneseCalendar", new JapaneseCalendar()},
{"JulianCalendar", new JulianCalendar()},
{"KoreanCalendar", new KoreanCalendar()},
{"TaiwanCalendar", new TaiwanCalendar()},
{"ThaiBuddhistCalendar", new ThaiBuddhistCalendar ()}
};

protected override void InitializeCulture()
{
if (Request.Form["LocaleChoice"] != null)
{
string selected = Request.Form["LocaleChoice"];
string[] calendarSetting = selected.Split('|');
string selectedLanguage = calendarSetting[0];

CultureInfo culture = CultureInfo.CreateSpecificCulture(selectedLanguage);

if (calendarSetting.Length > 1)
{
string selectedCalendar = calendarSetting[1];
var cal = culture.Calendar;
if (Calendars.TryGetValue(selectedCalendar, out cal))
culture.DateTimeFormat.Calendar = cal;
}

Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}
base.InitializeCulture();
}

protected void Page_Load(object sender, EventArgs e)
{
}
</script>

关于asp.net - ASP.NET 日历控件中的各种日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1959451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com