以编程方式在目标 URL 中添加菜单项触发器 Page_load

Programatically adding MenuItems triggers Page_load in target URL

我正在以编程方式添加菜单项,因此我可以根据用户的角色控制显示哪些菜单项。我的问题是我添加的每个菜单项的行为都好像在加载过程中被单击过一样。精简代码,这里是简化的代码:

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

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

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

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

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

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

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