繁体   English   中英

覆盖ASP.net中的母版页功能

[英]Overriding a master page function in ASP.net

在我的母版页中,我有了这条线

<div class ="breadcrumbs" runat="server"><%= SitePath()%></div>  

SitePath()涉及一个自定义类,它基于静态站点地图和动态生成的页面的组合来构建导航元素。 它返回自定义痕迹导航元素的html。

这是我后面的代码中的SitePath()代码

public string SitePath()
{
    BreadCrumbNav breadNav = new BreadCrumbNav();
    breadNav.divClass = ".dv";
    breadNav.homeTitle = "ABC Home";
    return breadNav.Build();
}

我希望能够从动态页面覆盖它,以便我可以添加到路径中。 例如...

public override string SitePath()
{
    BreadCrumbNav breadNav = new BreadCrumbNav();
    breadNav.divClass = ".dv";
    breadNav.homeTitle = "ABC Home";
    breadNav.AddPage("Cooking Equipment", "PathyGoodness/Cooking+Equipment.ASPX");
    breadNav.AddPage("Toasters", "PathyGoodness/Cooking+Equipment/Toasters.ASPX");
    return breadNav.Build();
}

有没有办法将母版页方法纳入范围,以便我可以覆盖它们 - 或者我是否需要以不同的方式解决这个问题? 感觉我错过了一些非常明显的东西,但我似乎陷入困境。

谢谢你的帮助!

由于Master页面实际上并未继承,而是用作模板,因此这不是直接可行的。

您可以尝试其他一些方法:

首先,将其放在ContentPlaceholder中,并仅在必要时在各个页面的ASPX标记中覆盖它。

一种更复杂的方法是为所有页面创建一个接口,以保证它们具有SitePath()方法。 主页上调用该方法,而在那些不“覆盖”该行为的页面中,只需调用主服务器。 在其他人中,将您的特定实现添加到该方法,瞧! (我想您也可以使用抽象的BasePage类型类从该方法调用Master)

通常我反对将页面/上下文特定的方法放在母版页类中。 为什么? 因为,正如Josh所说,Masterpages只是模板。 您永远不会从母版页继承,也不能在没有访问Page对象的情况下显示母版页。 因此,将这些方法放在Page类中更有意义。

一种更简单的方法是直接从子页面引用主控件。

在您的母版页中,将sitepath()函数替换为文字控件,如下所示:

<div class ="breadcrumbs" runat="server"><asp:Literal id="litSitePath" runat="server" /></div>

然后在母版页的代码中使用:

BreadCrumbNav breadNav = new BreadCrumbNav(); 
breadNav.divClass = ".dv";    
breadNav.homeTitle = "ABC Home";    
litSitePath.Text = breadNav.Build();

在子页面中,您可以使用Master.FindControl方法覆盖它,如下所示:

BreadCrumbNav breadNav = new BreadCrumbNav();    
breadNav.divClass = ".dv";    
breadNav.homeTitle = "ABC Home";    
breadNav.AddPage("Cooking Equipment", "PathyGoodness/Cooking+Equipment.ASPX");    
breadNav.AddPage("Toasters", "PathyGoodness/Cooking+Equipment/Toasters.ASPX");    
Literal litSitePath = (Literal)Master.FindControl("litSitePath");
litSitePath.Text = breadNav.Build();

简单易用,不会乱搞事件处理程序或界面或类似的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM