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