我有一个包含多个自定义.ascx控件的aspx页面。 aspx左侧有一个主菜单。在名为getmenu()的方法中,页面加载时生成菜单。
我遇到的问题是页面上还有一些自定义控件,这些控件导致父页面回发,这会丢失我的菜单。
在父页面中,每当点击完成时,我通常会再次初始化getmenu()方法并重建它,但在控件中我无法访问该方法。
我想知道如何刷新父页面,以便生成菜单,就像它从未消失一样。
这是父页面母版页中的getMenu()方法:
public void getMenu()
{
DataTable table = new DataTable();
// get the connection
try
{
using (SqlConnection conn = new SqlConnection(GetConnection.GetConnectionString()))
{
DataSet ds = new DataSet();
SqlCommand sqlComm = new SqlCommand("PL_Menu_Module_Get", conn);
sqlComm.Parameters.AddWithValue("@UserID", UserID);
sqlComm.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = sqlComm;
da.Fill(table);
}
// populate the parent node first
DataView view = new DataView(table);
view.RowFilter = "ParentMenuId is NULL";
foreach (DataRowView row in view) //Level 1
{
CreateDiv(row["MenuName"].ToString(), row["MenuUrl"].ToString(), 1, row["ParentMenuId"].ToString(), row["MenuId"].ToString());
DataView child = new DataView(table);
child.RowFilter = "ParentMenuId =" + row["MenuId"].ToString();
foreach (DataRowView rowchild in child) //Level 2
{
CreateDiv(rowchild["MenuName"].ToString(), rowchild["MenuUrl"].ToString(), 2, rowchild["ParentMenuId"].ToString(), rowchild["MenuId"].ToString());
DataView child2 = new DataView(table);
child2.RowFilter = "ParentMenuId =" + rowchild["MenuId"].ToString();
foreach (DataRowView rowchild2 in child2) //Level 3
{
CreateDiv(rowchild2["MenuName"].ToString(), rowchild2["MenuUrl"].ToString(), 3, rowchild2["ParentMenuId"].ToString(), rowchild2["MenuId"].ToString());
}
}
}
}
catch (SqlException ex)
{
ExceptionHandling.SQLException(ex, constPageID, constIsSiteSpecific);
}
}
该控件被添加到使用该母版页的default.aspx。
答案 0 :(得分:0)
虽然我根据您提供的说明严重怀疑您的设置,但您可以使用的一种技术是事件系统。
在自定义控件中,您可以拥有事件声明:
public event EventHandler MyEvent;
您希望提出该事件的条件:
On Control Load {
if(MyEvent != null) {
MyEvent(this, EventArgs.Empty);
}
}
然后您的父页面可以订阅您的控件的事件:
myCustomControl.MyEvent += (object, sender) => Refresh();