0

こんにちは、Stackoverflow コミュニティです。Visual Studio 2012 および Windows Server 2012 を使用して SharePoint 2013 サーバーで作業しています。そのため、テキスト ボックスを介して GUI にリンクを追加する Web パーツを作成する必要があります。さらに、別のリンクも追加できるはずです。新しいリンクを追加すると、リンクのコレクション全体がリストに表示されます。問題は次のとおりです。リンクを追加した後、サイトがリロードされます。結果として、リンクを格納する配列には最新のリンクのみが含まれます。以前のリンクはすべてなくなっている/削除されています。

これに対する私のアプローチは次のとおりです。

    protected void Page_Load(object sender, EventArgs e) {
        if (Page.IsPostBack) {
            Events = new List<String>();
        }
    }

    protected void btnAddLink_click(object sender, EventArgs e) {
        AddToList();
        List<String> links = Events;
        foreach (String s in links) {
            HyperLink link = new HyperLink();
            link.NavigateUrl = s;
            link.Text = s;
            lnkPanel.Controls.Add(link);
        }
        foreach (String l in links) {
            tbDescription.Text += l + "\n";
        } 
    }

    public List<String> Events {
        get { return (List<String>)ViewState["HyperLinkList"]; }
        set { ViewState["HyperLinkList"] = value; }
    }

    public void AddToList() {
        List<String> events = Events; // Get it out of the viewstate
        String l = tbLinks.Text; // tb = textbox (user input)
        HyperLink link = new HyperLink();
        link.NavigateUrl = tbLinks.Text;
        link.Text = tbLinks.Text;
        if (!events.Contains(link.NavigateUrl.ToString())) {
            events.Add(l);
        }
        Events = events; // Add the updated list back into the viewstate

    }

誰かが私の問題を解決してくれることを願っています。

4

1 に答える 1

2

ああ、これが必要です:

protected void Page_Load(object sender, EventArgs e) {
    if (!Page.IsPostBack) {
        Events = new List<String>();
    }
}

ページが読み込まれるたびに、viewstate のリストの内容が消去されます。を追加し!て、ポストバックでないことを確認する必要があります。

于 2013-01-17T09:05:19.177 に答える