【问题标题】:Getting Error while rending the asp control渲染asp控件时出错
【发布时间】:2026-01-10 00:50:02
【问题描述】:

我正在尝试将 CssClass 放入导航菜单的链接按钮。 这是因为当我单击链接按钮时,它会将其类设置为活动。 这里我在创建控件时出错。

<div class="navigation">
<ul>
<li class="homenavBt">
<asp:LinkButton ID="LinkHome" runat="server" <% If Session("Page")="Home" Then %> CssClass="active" <% End If %> >Home</asp:LinkButton></li>
<li class="newsBt">
<asp:LinkButton ID="LinkNews" runat="server"  <% If Session("Page")="News" Then %> CssClass="active" <% End If %> >News</asp:LinkButton></li>
<li class="sportsbt">
<asp:LinkButton ID="LinkSports" runat="server"  <% If Session("Page")="Sports" Then %> CssClass="active" <% End If %> >Sports</asp:LinkButton></li>
<li class="glamournavBt">
<asp:LinkButton ID="LinkArticle" runat="server"  <% If Session("Page")="Article" Then %> CssClass="active" <% End If %> >Article</asp:LinkButton></li>
<li class="technav_bt">
<asp:LinkButton ID="LinkGallery" runat="server"  <% If Session("Page")="Gallery" Then %> CssClass="active" <% End If %>>Gallery</asp:LinkButton></li>
</ul>
</div>

当我点击链接按钮时,我需要为各个页面设置会话,如下所示。

Protected Sub LinkNews_Click(sender As Object, e As EventArgs) Handles LinkNews.Click
        Session("Page")="News"
End Sub

如果有什么不明白的请评论 谢谢!!

【问题讨论】:

  • 只是想知道为什么你有一个 c# 标签?
  • 希望他们能帮忙

标签: asp.net .net html vb.net


【解决方案1】:

您遇到此问题的原因是您无法将内联代码放入具有 runat="server" 的控件中,除非您使用数据绑定语法:,并调用DataBind() 来自您的代码。

嗯,这就是你可以做到的方式,使用你的代码(在 C# 中):

protected void Page_Load(object sender, EventArgs e)
{
    CheckPage();
}

private void CheckPage()
{
    if (Session["Page"] as string == "News")
        LinkNews.CssClass = "active";
    else
        LinkNews.CssClass = String.Empty;
}

protected void LinkNews_Click(object sender, EventArgs e)
{
    Session["Page"] = "News";
    CheckPage();
}

...在这种情况下,您不会在标记中指定 CSS 类:

<div class="navigation">
<ul>
<li class="homenavBt">
<asp:LinkButton ID="LinkHome" runat="server">Home</asp:LinkButton></li>
<li class="newsBt">
<asp:LinkButton ID="LinkNews" runat="server">News</asp:LinkButton></li>
<li class="sportsbt">
<asp:LinkButton ID="LinkSports" runat="server">Sports</asp:LinkButton></li>
<li class="glamournavBt">
<asp:LinkButton ID="LinkArticle" runat="server">Article</asp:LinkButton></li>
<li class="technav_bt">
<asp:LinkButton ID="LinkGallery" runat="server">Gallery</asp:LinkButton></li>
</ul>
</div>

如果你想使用绑定技术,它可能看起来像这样(还是 C#):

<asp:LinkButton ID="LinkNews" runat="server" CssClass='<%# Session["Page"] as string == "News" ? "active" : "" %>'>News</asp:LinkButton>

...您必须从代码中调用 DataBind(),而不是 CheckPage()(在我之前的示例中)。

【讨论】: