1

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

クリアされていない場合はコメントしてくださいありがとうございます!!

4

1 に答える 1

0

この問題が発生する理由は、データバインディング構文<%#...%>を使用して、DataBind()を呼び出さない限り、runat="server"を使用してインラインコードをコントロールに配置できないためです。あなたのコードから。

さて、これがあなたがおそらくそれをすることができる方法です、あなたのコードビハインド(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>

...そして、CheckPage()の代わりにコードからDataBind()を呼び出す必要があります(私の前の例では)。

于 2012-12-02T20:36:57.933 に答える