使用C#动态更改HTML控件样式

4
我希望制作一个网站,如果管理员通过admin.aspx登录,我想在我的菜单列表中添加一个导航。我的菜单列表是由<ul>...<li>这种HTML控件构成的。那么我该如何动态地将新的<li>添加到我的主页面菜单中呢?
或者,最初我添加了管理员菜单,并应用了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>

and this is my Default.aspx code

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登录控件具有内置功能,使其非常容易-您可以设置访问角色,然后可以使用会话变量来显示/隐藏应用程序中的各种元素。 - Nyra
不,我有自己的登录页面,我没有使用内置的登录控件。 - Saba Aslam
3个回答

2

根据你的代码,我猜测这行代码:

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

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

例如:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
          setAdminMenu();
        }
    }

 private void setAdminMenu()
    {
      if(f.pass.Equals(txtpass.Value))
      {
        abc.Visibility = visible;
      }
    }

0

萨巴,你做错了。

我能想到两种可能的简单方法来完成这个任务:

1. 设置 web 控件的 Visible 属性

在母版页代码后台文件(MasterPage.master.cs)中,在 OnLoad 或者 Page_Load 方法中添加以下代码:

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

MasterPage.master中,将runat="server"添加到您的<li>标记中。 2.以编程方式添加<li>MasterPage.master中,将runat="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);
}

0

您需要使用会话(session)并在主页面的顶部检查会话值的存在。当您返回到主页面时,它会再次检查会话值,然后您可以编写CSS代码将管理员菜单设置为可见。

技术上,步骤如下:

  1. 在第二个页面(default.aspx)上创建会话(session)
  2. 在主页面的顶部检查会话值:如果会话值存在,则编写代码显示管理员菜单。
  3. 创建一个注销页面以使会话失效。

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


@Saba Aslam。欢迎您,如果我的回答有用,您可以勾选我的答案,这样其他遇到同样问题的人就可以轻松找到正确的解决方案。 :) - jasim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接