![](/img/trans.png)
[英]HttpHandler vs HttpModule for Overriding Render Function on ASP.NET Page
[英]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.