vma*_*uez 4 asp.net overriding
我想有些我看到了一个关于此的例子但是找不到它了:
有没有办法在全局基础上覆盖Page_Init()事件而不创建从Page继承的新MyCustomPage类?
我希望有一些方法可以在没有子类化页面的情况下对页面进行全局覆盖(不需要从子类继承我的页面).我正在考虑关于Global.asax的一些内容,但是对于Page.
这是我希望在每个页面中在PreInit上运行的代码:
' Change Culture's ShortDate to "dd/mmm/yyyy" for es-MX. If CultureInfo.CurrentCulture.Name = "es-MX" Then Dim info As CultureInfo = CultureInfo.CurrentCulture.Clone info.DateTimeFormat.ShortDatePattern = "dd/MMM/yyyy" System.Threading.Thread.CurrentThread.CurrentCulture = info info = Nothing End If
在此先感谢您的时间.
编辑:
截至今天,已有2个完美的解决方案(针对我的情况)在下面提供.我已选择其中一个作为已接受的答案,即使我将使用其他解决方案.这是因为我将使用的是@Simon对此问题的评论.
解决方案是将我的代码放在Global.asax中:
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) ' Configure ShortDatePattern as "dd/MMM/yyyy" for es-MX to avoid month-day confusions when both are numeric. If CultureInfo.CurrentCulture.Name = "es-MX" Then Dim oCultureInfo As CultureInfo = CultureInfo.CurrentCulture.Clone oCultureInfo.DateTimeFormat.ShortDatePattern = "dd/MMM/yyyy" System.Threading.Thread.CurrentThread.CurrentCulture = oCultureInfo oCultureInfo = Nothing End If End Sub
在我的问题中,我问过如何在不对子页面进行子类化的情况下覆盖Page_Init().这似乎引起了一些混乱.原因是我正在创建一个项目模板,其中包含许多通常需要的功能(如用户管理,权限管理等).
对于使用此模板创建的项目,我希望默认使用es-MX Culture并修改ShortDatePattern以在缩写的月份名称中显示月份.由于这是一个项目模板,我想让我的程序员免于实现从自定义类继承的页面的需要.在这个(项目模板)级别对页面强制进行子类化只是让我觉得"很奇怪".
另一个解决方案.我标记为接受的那个是由@Ishtar提供的.我已经实现了它并且它完美地工作并且符合我的需要.他提供的示例代码中唯一缺少的是需要调用MyBase.OnInit(e).
我要感谢所有提供解决方案和评论的人,并非常特别地感谢@Ishtar,他提供了一个初步答案并坚持这个主题,因为我拒绝了我的需求.然后他提供了第二个答案,证明是正确的(标记为已接受的答案).
另一种方法是使用页面适配器
public class TestPageAdapter : System.Web.UI.Adapters.PageAdapter
{
protected override void OnInit(EventArgs e)
{
if (Thread.CurrentThread.CurrentCulture.Name == "es-MX")
{
CultureInfo info = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
info.DateTimeFormat.ShortDatePattern = "dd/MMM/yyyy";
System.Threading.Thread.CurrentThread.CurrentCulture = info;
info = null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在App_Browsers/all.browser中注册您的PageAdapter类
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.Page" adapterType="TestPageAdapter" />
</controlAdapters>
</browser>
</browsers>
Run Code Online (Sandbox Code Playgroud)
它将在每个页面init上运行.
归档时间: |
|
查看次数: |
3438 次 |
最近记录: |