6

私がやろうとしているのは、Webパーツにリテラル(h2)の値を設定できるテキストボックスと、ポストバックしてそれに応じてリテラルを設定する「保存」ボタンを持つWebパーツを作成することです。これには、1 つの大きな注意事項があります。ポストバック後にページが読み込まれると、リテラルは変更されていません。ただし、実際にリテラルに設定されているものをログに記録すると、新しい値が含まれます。また、ページを再度リロード (F5) すると、正しく表示されます。

最初はViewStateに違いないと思ったので、すべてのコントロールで無効にしました。ViewStateに保存されていないことを確認しました(デコードしました)。そのため、ViewState は古い値を保存していません。

「CreateChildControls」を使用して、コントロールを Web パーツに追加しています。ポストバックは単純なイベント ハンドラーによって処理されます。

何か案は?

ちなみに私はMOSS2007を使っています。

4

4 に答える 4

1

このブログ投稿は、Web パーツのライフ サイクルをよりよく理解し、問題を解決するのに役立つかもしれません。http://platinumdogs.wordpress.com/2008/10/14/sharepoint-webpart-lifecycle-events/

于 2009-02-18T19:42:12.287 に答える
0

常に AJAX 更新パネルを使用し、その中にリテラル コントロールをドロップして、更新パネルで UDP.Update を呼び出すことができます。また、最初の例のチェックではrunat="server"、リテラル コントロールを使用しています。Page_Load イベントに変更を加えることができ、これが Web パーツに表示されるはずです。

于 2009-02-27T16:19:16.370 に答える
0

ここに提案があります。とにかく私にとってはうまくいきます。

using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace Skaar.UI
{
    public class PostBackWebPart:WebPart
    {
        private Literal literal;
        private TextBox textBox;
        protected override void OnInit(System.EventArgs e)
        {
            base.OnInit(e);
            literal=new Literal();
            literal.Mode = LiteralMode.PassThrough;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
            Controls.Add(literal);
            textBox=new TextBox();
            textBox.AutoPostBack = true;
            Controls.Add(textBox);
            textBox.TextChanged += textBox_TextChanged;                                                                                                                                                                                                                                                                                                                                      
        }

        void textBox_TextChanged(object sender, System.EventArgs e)
        {
            literal.Text = string.Format("<h1>{0}</h1>", textBox.Text);
        }
    }
}
于 2009-04-27T21:01:19.180 に答える