asp.net如何循环遍历 div 来重置该委托中的链接?

发布时间: 2017/3/26 5:51:33
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

如果我有像这样画我身边动态菜单的方法︰

private void DrawSideMenu()
{

    LinkButton x;
    TaskDTO TaskList = new TaskDTO();
    List<TaskDTO> List =   TaskList.DrawMenu(int.Parse(Session["emp"].ToString()));

    HtmlGenericControl myDIV = new HtmlGenericControl("div");
    myDIV.ID = "menu8";
    HtmlGenericControl myOrderedList = new HtmlGenericControl("ul");//css clss for <ul>
    myOrderedList.ID = "orderedList";
    myOrderedList.Attributes.Add("class", "task");
    HtmlGenericControl listItem1;
    string count = "";
    foreach (TaskDTO i in List)
    {
        count = AdjustMenuCount1(i.TaskCode);
        x = new LinkButton();
        x.ID = i.TaskCode.ToString();
        x.Text = i.TaskName + "&nbsp; &nbsp;" + count;
        x.Click += new EventHandler(TaskC);
        x.Style["FONT-FAMILY"] = "tahoma";
        listItem1 = new HtmlGenericControl("li");
        listItem1.Attributes.Add("class", "normal");
        if (count != "0")
        {
            listItem1.Controls.Add(x);
            myOrderedList.Controls.Add(listItem1);
        }
    }
    myDIV.Controls.Add(myOrderedList);
    MenuTD.Controls.Add(myDIV);
    Session["SideMenu"] = myDIV;//Save to redraw when page postbacks
}

此方法需要长时间才能画我管它叫一次我 menu.so ( !IsPostBack ) 并将其保存在会话中,以便我能绘它像这样︰

MenuTD.Controls.Add( ((System.Web.UI.Control)(Session["SideMenu"])));

它成功地重新绘制它,但是当我点击任何链接它不撞事件,以为它是不可能保存 x.Click += new EventHandler(TaskC); 在会话中,所以我想知道如何遍历到重置我的链接的委托我会议内容吗?

解决方法 1:

想法行不通因为如果你不安装电线事件处理程序每次加载页面时,它不会跑。

如果我们回到原来的问题,你说它是缓慢的。在运行时创建的控件不能慢,它是最有可能您创建您的项目的列表的方法︰

List<TaskDTO> List = TaskList.DrawMenu(int.Parse(Session["emp"].ToString()));

而不是存储完整的菜单,尝试将存储在会话的唯一列表并像往常一样创建所有控件。如果菜单上只有一页需要,然后使用视图状态而会话不是。

同时也使得这样的改变整个代码作为目前是你硬编码所有的样式和布局设置在代码中。在 aspx,创建所有布局 (div、 ul、 李) 在 css 中移动所有的样式 (例如,您使用"任务"类但仍在代码中设置"tahoma")。这会简化代码,并带来更大的灵活性。

List<TaskDTO> List = null;

void Page_Load(object sender, EventArgs e)
{
    if (ViewState["List"] != null) {
        List = (List<TaskDTO>)ViewState["List"];
    } else {
       // ArrayList isn't in view state, so we need to load it from scratch.
        List = TaskList.DrawMenu(int.Parse(Session["emp"].ToString()));
    }

    // Code to create menu, e.g. 
    if (!Page.IsPosBack) {
        Repeater1.DataSource = List;
        Repeater1.DataBind();
    }
}

void Page_PreRender(object sender, EventArgs e)
{
    // Save PageArrayList before the page is rendered.
    ViewState.Add("List", List);
} 
...

<ul id="orderedList">
    <asp:Repeater ID="Repeater1" runat="server">
        <ItemTemplate>
            <li><%# Eval("TaskName") %></li>
        </ItemTemplate>
    </asp:Repeater>
</ul>
官方微信
官方QQ群
31647020