繁体   English   中英

使用c#动态更改html控件样式

[英]dynamically change html control style using c#

我想创建一个网站,如果管理员通过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 ,管理菜单会自动隐藏

  • 从你的代码,我猜这行:

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

    是登录过程中某种形式的已保存值。 如果是这种情况并且您有一些隐藏的输入字段或其他内容 - 则每次页面加载()时都会调用设置Admin菜单的方法。 根据您在网站上工作的记忆登录值,更改“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;
          }
        }
    

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

    从技术上讲,一步一步的程序:

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

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

    萨巴,你做错了。

    我可以想到两种可能的简单方法来实现这一目标:

    1.设置Web控件Visible属性

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

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

    MasterPage.masterrunat="server"添加到<li>标记中。

    2.以编程方式添加<li>

    MasterPage.masterrunat="server"添加到<ul>标记中。

    并在后面的母版页代码中添加到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);
    }
    

    暂无
    暂无

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

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