1

linkbuttonとlabelのenableviewstateプロパティをtrueに設定しました。また、pageloadイベントハンドラーのポストバックで同じボタンを再生成します。しかし、linkbuttonのonclickイベントハンドラーを呼び出すことができません。コードの問題点を教えてください。

public partial class _Default:System.Web.UI.Page {protected void Page_Load(object sender、EventArgs e){

        List<LinkButton> listOfLinkButton = Session["ListOfLinkButton"] as List<LinkButton>;
        List<Label> listOfLabel = Session["ListOfLabel"] as List<Label>;
        if(listOfLabel!=null && listOfLinkButton!=null)
        {
            for (int i = 0; i < listOfLinkButton.Count; i++)
            {
                PlaceHolder1.Controls.Add(listOfLinkButton[i]);
                PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
                PlaceHolder1.Controls.Add(listOfLabel[i]);
                PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
            }
        }



}



protected void LinkButton_Click(object sender, EventArgs e)
{
    LinkButton linkButton = sender as LinkButton;

    Response.Redirect(linkButton.Attributes["LinkUrl"]);        
}
protected void Button1_Click1(object sender, EventArgs e)
{

    List<LinkButton> listOfLinkButton = new List<LinkButton>();
    List<Label> listOfLabel = new List<Label>();
    Rss rssDocumentObj = RssFileReader.GetRssDocumentData(TextBox1.Text);
    for (int j = 0; j < rssDocumentObj.ListOfChannel.Count; j++)
    {
        LinkButton linkButton = new LinkButton();
        linkButton.ID = "LinkButtonForChannelDynamicInPlaceHolder1Id" + j;
        linkButton.EnableViewState = true;
        linkButton.ForeColor = Color.Blue;
        linkButton.Font.Bold = true;
        linkButton.Font.Size = 18;
        linkButton.Font.Underline = true;
        linkButton.Text = rssDocumentObj.ListOfChannel[j].ChannelTitle.InnerText;
        linkButton.Click += new EventHandler(LinkButton_Click);
        linkButton.Attributes.Add("LinkUrl", rssDocumentObj.ListOfChannel[j].ChannelLink.InnerText);
        linkButton.Attributes.Add("onmouseover", "this.style.color = '#006699'");
        linkButton.Attributes.Add("onmouseout", "this.style.color = '#0000ff'");
        PlaceHolder1.Controls.Add(linkButton);
        listOfLinkButton.Add(linkButton);
        PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
        Label label = new Label();
        label.ID = "LabelForChannelDynamicInPlaceHolder1Id" + j;
        label.EnableViewState = true;
        label.ForeColor = Color.DarkSlateGray;
        label.Text = rssDocumentObj.ListOfChannel[j].ChannelDescription.InnerText;
        PlaceHolder1.Controls.Add(label);
        listOfLabel.Add(label);
        PlaceHolder1.Controls.Add(new LiteralControl("<br />"));

        for (int i = 0; i < rssDocumentObj.ListOfChannel[j].ListOfItem.Count; i++)
        {
            LinkButton linkButtonForItem = new LinkButton();
            linkButtonForItem.ID = "LinkButtonDynamicInPlaceHolder1Id" + j + " " + i;
            linkButtonForItem.EnableViewState = true;
            linkButtonForItem.ForeColor = Color.Blue;
            linkButtonForItem.Font.Bold = true;
            linkButtonForItem.Font.Size = 14;
            linkButtonForItem.Font.Underline = false;
            linkButtonForItem.Text = rssDocumentObj.ListOfChannel[j].ListOfItem[i].ItemTitle.InnerText;
            linkButtonForItem.Click += new EventHandler(LinkButton_Click);
            linkButtonForItem.Attributes.Add("LinkUrl", rssDocumentObj.ListOfChannel[j].ListOfItem[i].ItemLink.InnerText);
            linkButtonForItem.Attributes.Add("onmouseover", "this.style.color = '#006699'");
            linkButtonForItem.Attributes.Add("onmouseout", "this.style.color = '#0000ff'");
            PlaceHolder1.Controls.Add(linkButtonForItem);
            listOfLinkButton.Add(linkButtonForItem);
            PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
            Label labelForItem = new Label();
            labelForItem.ID = "LabelDynamicInPlaceHolder1Id" + i;
            labelForItem.EnableViewState = true;
            labelForItem.ForeColor = Color.DarkGray;
            labelForItem.Text = rssDocumentObj.ListOfChannel[j].ListOfItem[i].ItemDescription.InnerText;
            PlaceHolder1.Controls.Add(labelForItem);
            listOfLabel.Add(labelForItem);
            PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
            Session["ListOfLinkButton"] = listOfLinkButton;
            Session["ListOfLabel"] = listOfLabel;
        }
    }  
}

}

4

2 に答える 2

1

そのボタンのどの側面がセッションに保存されるかについて推測しています。ページの読み込み中にセッション状態から復元する場合は、ボタンにイベントを再度追加してみてください。

于 2009-05-11T07:06:08.477 に答える
0

セッションから取得した後、ボタンにイベントハンドラーを再度割り当てることで解決策を得ましたが、保存されたセッション変数に既に割り当てられているのに、なぜ再度割り当てる必要があるのか​​理解できませんでした。

于 2009-05-11T09:01:22.093 に答える