加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 在没有子类化页面的情况下全局覆盖Page_PreInit()?

发布时间:2020-12-16 07:21:31 所属栏目:asp.Net 来源:网络整理
导读:我想有些我看到了一个关于此的例子但是找不到它了: 有没有办法在全局基础上覆盖Page_Init()事件而不创建从Page继承的新MyCustomPage类? 我希望有一些方法可以在没有子类化页面的情况下对页面进行全局覆盖(不需要从子类继承我的页面).我正在考虑关于Global.
我想有些我看到了一个关于此的例子但是找不到它了:

有没有办法在全局基础上覆盖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;
        }
    }    
}

然后在App_Browsers / all.browser中注册您的PageAdapter类

<browsers>
  <browser refID="Default">
    <controlAdapters>
      <adapter controlType="System.Web.UI.Page" adapterType="TestPageAdapter" />
    </controlAdapters>
  </browser>  
</browsers>

它将在每个页面init上运行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读