HijriDateView ASP.NET 控件






4.58/5 (9投票s)
一个 ASP.NET 控件,允许在 ASP.NET 页面上以字符串格式绘制当前的 Hijri 日期。
引言
不久前,在做一个项目时,我需要将日期以 Hijri 格式(伊斯兰历)显示在 ASP.NET 页面上。虽然 FCL 包含一个 HijriCalendar
类,但它仅对应于计算算法,并不允许格式化输出以字符串形式显示日期。因此,本文介绍的 HijriDateView
控件应运而生。
它看起来的样子
HijriDateView
是一个 ASP.NET 复合控件,由一个 Panel
(对应于 HTML Div
)和一个 Panel
内部的纯文本组成。默认情况下,在页面上,它看起来是这样的:
由于 Panel
类用作容器,因此可以对控件应用任何视觉样式,使其看起来像这样:
或者这个
或者这个
如何使用该控件
|
只需编译附加的项目,或使用 IslamicTools_bin.zip 文件中已编译的程序集。在您的 ASP.NET WebForms 项目中引用 IslamicTools.dll,您的 Visual Studio 工具箱中就会出现一个新项。只需将其拖到 ASP.NET 页面上的合适位置,就会生成类似以下的代码: |
<IslamicTools:HijriDateView ID="hijriDateView" runat="server">
</IslamicTools:HijriDateView>
现在,您可以设置控件的一些属性:
Language
- 用于阿拉伯月份名称音译的语言。目前,可能的值是英语和俄语。IncludeArabic
- 指示是否在生成的铭文(inscription)中显示阿拉伯文本。Date
- 用于转换和显示的日期。如果未指定,则使用当前日期(DateTime.Now
)。
所有常规的 ASP.NET 控件视觉属性也可以在这里设置。现在,只需编译并运行您的页面即可看到结果。
工作原理
有四个文件与此控件相关。
|
|
在 ASP.NET 页面的生命周期中,会创建一个 HijriDateView
控件的新实例。我们在构造函数中设置 Date
、Language
和 IncludeArabic
属性的默认值。如果用户手动设置它们的值,这些值将被覆盖。在页面生命周期的 LoadComplete
阶段,将调用 HijriDateView
的 CreateChildControls
方法。它将准备一个容器(Panel
)和一个文本占位符(LiteralControl
),同时创建一个 HijriDate
类的新实例并使用定义的属性。
protected override void CreateChildControls()
{
Panel pnl = new Panel();
HijriDate hd = new HijriDate(dt);
string label = String.Format("<nobr>{0}</nobr>",
hd.ToString(language, includeArabic));
LiteralControl lc = new LiteralControl(label);
Controls.Add(pnl);
pnl.Controls.Add(lc);
base.CreateChildControls();
}
HijriDate
类接受一个 DateTime
对象作为输入。在构造函数中,会为指定日期创建一个新的 HijriCalendar
实例,以及对应于年份、月份编号和月份天数的私有数字字段,并进行填充。此外,字符串资源从 HijriDate.xml 文件加载。
public HijriDate()
: this(DateTime.Now)
{
}
public HijriDate(DateTime dt)
{
hijriCalendar = new HijriCalendar();
hijriYearNumber = hijriCalendar.GetYear(dt);
hijriMonthNumber = hijriCalendar.GetMonth(dt);
hijriDayNumber = hijriCalendar.GetDayOfMonth(dt);
LoadHijriDateXml();
}
HijriDate.xml 的格式如下:
<?xml version="1.0" encoding="utf-8" ?>
<Months>
<month number="1">
<English>Muharram</English>
<Arabic>محرم</Arabic>
<Russian>Мухаррам</Russian>
</month>
<month number="2">
<English>Safar</English>
<Arabic>صفر</Arabic>
<Russian>Сафар</Russian>
</month>
...
<month number="12">
<English>Dhu al-Hijja</English>
<Arabic>ذو الحجة</Arabic>
<Russian>Зуль-Хиджа</Russian>
</month>
</Months>
HijriDate
类有一个重写的 ToString()
方法,该方法负责将日期的数字表示转换为字符串。
public override string ToString()
{
return ToString(SupportedLanguages.English, true);
}
public string ToString(SupportedLanguages language,
bool includeArabicInscription)
{
return String.Format("{0} {1} {2}", hijriDayNumber.ToString(),
GetMonthName(language, includeArabicInscription),
hijriYearNumber.ToString());
}
就是这样。您可能已经注意到,这里没有提供所有代码,特别是 LoadHijriDateXml()
和 GetMonthName()
方法甚至没有被描述。但从它们的名称应该可以清楚它们的行为,并且它们的代码可以在 HijriDateView_src.zip 文件中找到。
示例
可以在 http://www.russian-mosques.com 找到一个可用的控件。**IslamicTools** 库目前只包含一个 HijriDateView
控件。它将很快扩展其他控件。如果您有任何想法或建议,非常欢迎您与我联系。