【问题标题】:changing css in user control id更改用户控件 ID 中的 CSS
【发布时间】:2016-06-08 15:05:36
【问题描述】:

我正在尝试在名为 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>

【问题讨论】:

    标签: c# css webusercontrol


    【解决方案1】:

    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


    所以您的完整解决方案将是:

    从页面中,您可以将母版页面转换为特定类型(您自己的母版类型,公开所需功能),以避开类型不匹配的任何异常:

    内容页面:

    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()
       );
    }
    

    【讨论】:

    • 我似乎无法让它工作?有没有办法在后面的内容页面代码中有类似的东西:linka.Attributes("class") == "active";使用 FindControl 方法来定位用户控件中的链接 ID?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多