以编程方式添加MenuItems会触发目标URL中的Page_load

时间:2015-06-05 02:14:52

标签: asp.net menuitem

我正在以编程方式添加菜单项,以便根据用户的角色控制出现哪些菜单项。我的问题是,我添加的每个菜单项都表现得像在加载过程中被点击一样。剥去裸骨,这是简化的代码:

Public Class test2
Inherits System.Web.UI.Page

Private Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init
    If Not IsPostBack Then
        CreateMenu()
    End If
End Sub
Private Sub CreateMenu()
    MainMenu.Items.Add(New MenuItem("Home", "", "/Peak.aspx"))
End Sub
End Class

test2.aspx包含:

<form id="form1" runat="server">
    <asp:Menu ID="MainMenu" runat="server" >
        <Items>
        </Items>
    </asp:Menu>
</form>

这是Peak.aspx.vb中的所有代码:

Public Class Peak
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As
                System.EventArgs) Handles Me.Load
        MsgBox("This should not appear but does!!")
    End Sub

End Class

当test2设置为启动页面时,正在加载Peak.aspx Page_Load并显示消息框。我的真实代码添加了几个菜单项,CreateMenu会导致所有page_Loads被大量开销触发!

这是一个错误或我可以关闭的东西,是否有解决方法?

1 个答案:

答案 0 :(得分:1)

您正在使用此构造函数https://msdn.microsoft.com/en-us/library/b00a9c35.aspx

public MenuItem(
    string text,
    string value,
    string imageUrl
)

如果仔细观察,第三个参数会设置imageurl,从而在尝试加载url时触发Page_Load事件。也许你想用4个参数来重载? https://msdn.microsoft.com/en-us/library/70k2h50z.aspx

public MenuItem(
    string text,
    string value,
    string imageUrl,
    string navigateUrl
)