带有非现场链接的asp.net构建运行时菜单

带有非现场链接的asp.net构建运行时菜单,asp.net,Asp.net,我希望你能帮助我。首先,我想告诉你们,我是一个桌面应用的家伙,这意味着我主要在桌面上开发我的应用。现在我正在尝试构建一些web应用程序,但这让我不确定是困惑还是做错了 我这里有一个代码,它在运行时填充菜单。运行时,因为菜单项是在代码隐藏时填充的,并且这些项是在数据库中获取的 以下是背后的代码: protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { Menus m

我希望你能帮助我。首先,我想告诉你们,我是一个桌面应用的家伙,这意味着我主要在桌面上开发我的应用。现在我正在尝试构建一些web应用程序,但这让我不确定是困惑还是做错了

我这里有一个代码,它在运行时填充菜单。运行时,因为菜单项是在代码隐藏时填充的,并且这些项是在数据库中获取的

以下是背后的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        Menus menu = new Menus();
        imgMainLogo.ImageUrl = VARIABLES.MainLogoImage;
        menu.PopulateMenuControl(ref mainmenu, 2);
        menu.PopulateMenuControl(ref footermenu, 9);
    }
    else
    {
        System.Diagnostics.Debug.WriteLine("link: " + footermenu.SelectedValue);
        if (footermenu.SelectedValue != null)
        {
            Response.Redirect(footermenu.SelectedValue, true);
        }
    }
}
以及PopulateMenuControl中的代码

public void PopulateMenuControl(ref Menu menucontrol, int menuparentid)
{
    //menucontrol.Items.Clear();

    foreach (MenuFields mf in GetMenusByParentID(menuparentid))
    {
        MenuItem menuitem = new MenuItem(mf.MenuName, ReplaceSystemNameLink(mf.Link));
        menucontrol.Items.Add(menuitem);

        foreach (MenuFields cmf in GetMenusByParentID(mf.MenuID))
        {
            MenuItem childmenuitem = new MenuItem(cmf.MenuName, ReplaceSystemNameLink(cmf.Link));
            menuitem.ChildItems.Add(childmenuitem);
        }
    }
}
因此,
Page.IsPostBack
是我在页面中做某事时应该学习的最基本的东西。但这里的问题是,我在“footermenu”中的一个菜单项有一个非现场链接,它应该将页面重定向到我的博客中。。但是发生的事情是,
footer菜单。SelectedValue
在我点击“博客”链接后是空的

发生什么事了


更新

我已经更新了代码,代码仍然卡住,SelectedValue仍然为空

protected void Page_Load(object sender, EventArgs e) { System.Diagnostics.Debug.WriteLine("Page_Load IsPostBack: " + Page.IsPostBack.ToString()); if (Page.IsPostBack) { if(footermenu.SelectedValue != null) { System.Diagnostics.Debug.WriteLine("link: " + footermenu.SelectedValue); } } } protected void Page_Init(object sender, EventArgs e) { System.Diagnostics.Debug.WriteLine("Page_Init IsPostBack: " + Page.IsPostBack.ToString()); if (!Page.IsPostBack) { Menus menu = new Menus(); imgMainLogo.ImageUrl = VARIABLES.MainLogoImage; menu.PopulateMenuControl(ref mainmenu, 2); menu.PopulateMenuControl(ref footermenu, 9); } } 受保护的无效页面加载(对象发送方、事件参数e) { System.Diagnostics.Debug.WriteLine(“Page_Load IsPostBack:+Page.IsPostBack.ToString()); 如果(第IsPostBack页) { 如果(footermenu.SelectedValue!=null) { System.Diagnostics.Debug.WriteLine(“链接:“+footermenu.SelectedValue”); } } } 受保护的无效页_Init(对象发送方,事件参数e) { System.Diagnostics.Debug.WriteLine(“Page_Init IsPostBack:+Page.IsPostBack.ToString()); 如果(!Page.IsPostBack) { 菜单=新菜单(); imgMainLogo.ImageUrl=VARIABLES.MainLogoImage; 菜单。PopulateMenuControl(参考主菜单,2); 菜单.PopulateMenuControl(参考页脚菜单,9); } }
你需要了解这个问题


使用动态控件(在代码中创建和添加),您需要在每次页面加载时重新创建它们-这最好在
init
事件处理程序中完成。

谢谢。我会试着回到这里。我已经更新了问题。我的意思是在运行时填充菜单。@Nullstr1ng-那很好,我理解。我的答案与您遇到的问题完全相关。@Nullstr1ng-删除
IsPostback
检入
Page_Init
。现在在回发邮件时发生的情况是,您没有重新创建菜单。使用“Page_PreRender”可以正常工作