【问题标题】:dynamically change html control style using c#使用c#动态更改html控件样式
【发布时间】:2014-12-19 11:09:45
【问题描述】:

我想创建一个网站,如果管理员通过admin.aspx 登录 我想在我的菜单列表中再添加一个导航。 我的菜单列表由 <ul>...<li> 组成,即 html 控件 那么如何动态添加新的

  • 在我的母版页菜单中 要不然 最初我添加管理菜单并应用style { visibility:hidden} 当登录成功时我想将其更改为{visibility:visible }

    这是我的母版页代码

    <ul id="ul_myLst" runat="server">
        <li><a href="Testimonials.aspx">Testimonial</a>
        </li>
        <li><a href="#fakelink">Contact Us</a>
        </li>
        <li><a href="#fakelink">About Us</a>
        </li>
        <li><a href="Registration.aspx">Registartion</a>
        </li>
        <li><a href="OurFaculty.aspx">Our Faculty</a>
        </li>
        <li id="abc" runat="server" style="visibility:hidden">
            <a href="OurFaculty.aspx">Admin</a>
        </li>
    </ul>
    

    这是我的Default.aspx 代码

    if (f.pass.Equals(txtpass.Value)) {
    
        HtmlGenericControl ul = (HtmlGenericControl)(this.Master.FindControl("abc"));
        //ul.Attributes["class"] = "admin-p";
        ul.Style.Remove("visibility");
        ul.Style["visibility"] = "visible";
    
        Response.Redirect("Index.aspx");
    
    }
    

    这段代码运行良好,但是当我再次返回 index.aspx 时,管理菜单会自动隐藏

  • 【问题讨论】:

    • 您使用什么登录功能? asp.net 登录控件具有内置功能,使这非常容易 - 您设置访问角色,然后可以使用会话变量显示/隐藏应用程序中的各种元素
    • 不,我有自己的登录页面,我没有使用内置登录控制
    • @SabaAslam 当提供的答案为您解决了您的问题时,通过单击答案左侧的复选标记“接受”该答案的标准礼节。对于任何对你有帮助/很好的答案,你也可以投票。

    标签: c# html css asp.net


    【解决方案1】:

    您必须使用会话并检查母版页顶部是否存在会话值。当您返回母版页时,它会再次检查会话值,然后您可以编写 css 代码将管理菜单设置为可见。

    技术上,一步一步的过程:

    1. 在第二页创建会话 (default.aspx)
    2. 检查母版页顶部的会话值:放置一个 if 条件,如果会话值存在,则编写代码以在其中显示管理菜单。
    3. 创建注销页面以使会话无效。

    您可以在此处阅读有关 ASP 会话的更多信息:http://www.w3schools.com/asp/asp_sessions.asp

    【讨论】:

    • @Saba Aslam。不客气,如果我的回答有用,您可以勾选我的回答,以便其他有相同问题的人可以轻松找到合适的解决方案。 :)
    【解决方案2】:

    从你的代码中,我猜是:

    if(f.pass.Equals(txtpass.Value))
    

    是登录过程中某种形式的保存值。 如果是这种情况,并且您有一些隐藏的输入字段或其他东西 - 那么每次您的页面加载时 () 然后调用一个设置管理菜单的方法。根据您在网站上使用的记住登录值类型更改“if”代码。 (会话或视图状态或 cookie)

    例子:

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
              setAdminMenu();
            }
        }
    
     private void setAdminMenu()
        {
          if(f.pass.Equals(txtpass.Value))
          {
            abc.Visibility = visible;
          }
        }
    

    【讨论】:

      【解决方案3】:

      萨巴,你做错了。

      我可以想到 2 种可能的简单方法来实现这一点:

      1.设置网页控件Visible属性

      在后面的母版页代码 (MasterPage.master.cs) 中将此行添加到 OnLoadPage_Load 方法中:

      var liAdmin  = (HtmlGenericControl)Page.FindControl("abc");
      liAdmin.Visible  = User.IsInRole("Admin");
      

      MasterPage.master 中,将runat="server" 添加到您的&lt;li&gt; 标记中。

      2。以编程方式添加&lt;li&gt;

      MasterPage.master 中,将runat="server" 添加到您的&lt;ul&gt; 标记中。

      并在母版页代码后面添加OnLoadPage_Load

      if(User.IsInRole("Admin"))
      {
          var ulMenu  = (HtmlGenericControl)Page.FindControl("ul_myLst");
          var liAdmin = new HtmlGenericControl("li");
          var a = new HtmlAnchor();
          a.HRef = "OurFaculty.aspx";
          a.InnerText = "Admin";
          liAdmin.Controls.Add(a);
          ulMenu.Controls.Add(liAdmin);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-14
        • 2018-06-12
        • 1970-01-01
        • 1970-01-01
        • 2021-09-15
        • 2012-05-07
        • 2014-12-04
        相关资源
        最近更新 更多