我试图做的asp.net网站我工作的一个标签式菜单。其中一项先决条件显然是以不同的方式为当前标签着色,因此用户可以知道当前是哪个标签。“内联”函数调用:函数是从不打
要做到这一点,我在我的代码隐藏使这个方法:
Protected Function GetCssClass(ByVal ctrl As LinkButton) As String
If ctrl.ID = currentLink Then
Return "current"
Else
Return String.Empty
End If
End Function
和我这样调用的方法在我的aspx页面:
<asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl="/Default.aspx" CssClass="<%#GetCssClass(LinkButton1) %>" >Home</asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" PostBackUrl="/Directory/page1.aspx" CssClass="<%#GetCssClass(LinkButton2) %>" >Page1</asp:LinkButton>
但方法不会被打......据我所知,每次绘制LinkButton
时应该调用该方法...
有人有一个想法,为什么?
在此先感谢!
编辑:就像一个精度一样,所有这些代码都在masterpage中。
EDIT2:下面是我根据Quagland's suggestion所做的更改。
在ASPX母版:
<asp:HiddenField ID="currentLink" runat="server" />
<asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl="/Default.aspx" OnClick="LinkButton_Click" OnPreRender="LinkButton_PreRender" >Home</asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" PostBackUrl="/OtherDirectory/Page1.aspx" OnClick="LinkButton_Click" OnPreRender="LinkButton_PreRender" >Page1</asp:LinkButton>
<asp:LinkButton ID="LinkButton3" runat="server" PostBackUrl="/OtherDirectory/Page2.aspx" OnClick="LinkButton_Click" OnPreRender="LinkButton_PreRender" >Page2</asp:LinkButton>
<asp:LinkButton ID="LinkButton4" runat="server" PostBackUrl="/OtherDirectory/Page3.aspx" OnClick="LinkButton_Click" OnPreRender="LinkButton_PreRender" >Page3</asp:LinkButton>
而且在后面的代码:
Protected Sub LinkButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles LinkButton1.Click, LinkButton2.Click, LinkButton3.Click, LinkButton4.Click, LinkButton5.Click, LinkButton6.Click, LinkButton7.Click, LinkButton8.Click
Dim lnk As LinkButton = CType(sender, LinkButton)
currentLink.Value = lnk.ID
End Sub
Protected Function GetCssClass(ByVal ctrl As LinkButton) As String
If ctrl.ID = currentLink.Value Then
Return "current"
Else
Return String.Empty
End If
End Function
Protected Sub LinkButton_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles LinkButton1.PreRender, LinkButton2.PreRender, LinkButton3.PreRender, LinkButton4.PreRender, LinkButton5.PreRender, LinkButton6.PreRender, LinkButton7.PreRender, LinkButton8.PreRender
Dim lnk As LinkButton = CType(sender, LinkButton)
lnk.CssClass = GetCssClass(lnk)
End Sub
的问题是现在的单击事件并不总是被解雇。在第一次点击时,没有任何反应,但在第二次点击标签时,点击事件被正确触发。任何线索?
编辑3:每次重新载入主页面(我的意思是,每个链接指向一对masterpage +内容页面),是否可以重置存储在隐藏字段中的值?
谢谢夸格兰!你的解决方案很好,但我仍然遇到问题......我注意到点击事件并不总是被解雇......你知道它为什么会发生吗?通常情况下,第一次点击并不会被考虑在内,但第二次点击则可以。 我会更新我的帖子以反映我所做的更改,以便您可以查看我是否做错了什么。再次感谢;-) – Shimrod 2010-04-20 08:50:08
使用跨页面回发使事情变得复杂一点...您会注意到,每次点击不同页面的链接时,点击事件都不会触发,但如果您点击相同页面的链接,点击事件将会触发。 这是因为跨页面回发实际上是目标页面上的新请求(即,不是真正的回发)。您可以使用Page.PreviousPage访问前一页的详细信息。您可以使用Page.IsCrossPagePostback检查是否发生了跨页面回发。 所以这就是...解决方案的不确定 – Beno 2010-04-20 11:59:30
好的谢谢你的解释,这就是我担心的......我滥用了“ ”组件吗?跨页面回发不是我所需要的,所以,如果有另一种方式去另一个页面,并保持点击事件,这将是值得欢迎的!否则,也许我应该打开一个新问题,询问“如何制作不使用多视图的选项卡式菜单”:-) –
Shimrod
2010-04-20 12:56:12