渲染asp控件时出错

时间:2012-12-02 20:19:06

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

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

如果没有清除某些内容,请发表评论 谢谢!

1 个答案:

答案 0 :(得分:0)

您遇到此问题的原因是您无法使用runat =“server”将内嵌代码放入控件中,除非您使用数据绑定语法:&lt;%#...%&gt;,并从您的代码中调用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()(在我之前的例子中)。