我正在尝试在名为myMenu的用户控件中定位锚点的ID。用户控件位于母版页上。因此,我正在尝试从其中一个内容页面添加一个“活动”类,以便突出显示该特定页面的链接。现在我有:
if (Master != null)
{
var sitenav = (UserControl)Master.FindControl(id: "myMenu");
if (sitenav != null)
{
var navlink = sitenav.Parent;
}
}
我仍在尝试弄清楚这里的逻辑,找不到任何有这些信息的东西。我知道我会把htmlanchor作为类型吗?
用户控件中的html:
<li><a runat="server" ID="linka" href="#">Link A</a></li>
<li><a runat="server" ID="linkb" href="#">Link B</a></li>
<li><a runat="server" ID="linkc" href="#">Link C</a></li>
<li><a runat="server" ID="linkd" href="#">Link D</a></li>
答案 0 :(得分:0)
<强> MasterPage.cs:强>
... class MasterClass ...
public void performAction(bool toggle){
if (toggle){
myId.class += "active"; //something like that
}
}
<强> ContentPage.cs 强>
(MasterClass)performAction(true);
这是您可以访问母版页功能并让它在母版页元素上执行某些操作的方法。
要从代码中添加一个css类,我建议您回答这个既优雅又完整的答案。 Caspar Kleijne's answer
所以完整解决方案将是:
在页面中,您可以将主页面转换为特定类型(公开所需功能的主站类型),使用as侧面步骤来解决类型不匹配的任何异常:
内容页面
var master = Master as MyMasterPage;
if (master != null)
{
master.AddClass("active");
}
在上面的代码中,如果Master不是MyMasterPage类型,那么master将为null并且不会尝试任何方法调用;否则会按预期调用。
<强>母版强>
public void AddClass(string classname ){
// add a class
myMenu.CssClass = String.Join(" ", myMenu
.CssClass
.Split(' ')
.Except(new string[]{"",classname})
.Concat(new string[]{classname})
.ToArray()
);
}