ASP.NET 使用 BasePage 与 MasterPage 进行模板化

ASP.NET Templating with BasePage vs MasterPage

我必须处理一个 ASP.NET 项目,我必须在其中支持本地化和翻译。 colture 的更改可能只发生在 Page 对象的 InitializeCulture 方法中,而不发生在 MasterPage 上。

通常当我必须处理公共元素时 (header/footer),我将它们放在 MasterPage 中,但这样做会阻止我正确地本地化这些元素。 所以我很想了解如何使用将由所有其他页面派生的公共基页(一种母版页)来模板化页面。

我发现这篇文章清楚地解释了如何处理这种情况,但我认为有点过时了: https://www.codeproject.com/Articles/2915/ASP-NET-Page-Templates-Using-Inheritance

所以我会问是否有更好的方法或技术来实现我的目标。

这里有一个简单的演示,说明如何将变量发送到母版页。在名为 Language.

的 Master 中放一个 public 属性
public partial class Site1 : System.Web.UI.MasterPage
{
    public string Language { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = $"My language is {Language}.";
    }
}

然后在普通页面中为母版添加一个属性并将Page.Master投射到母版页面的部分class(默认为Site1)。

public partial class Default1 : System.Web.UI.Page
{
    public Site1 master;

    protected void Page_Load(object sender, EventArgs e)
    {
        master = (Site1)Page.Master;
    }

然后您可以从主页访问 Language 中的母版。

master.Language = "nl-NL";