6

我要做的是创建一个 webpart,它有一个文本框,您可以在其中设置 webpart 上的文字 (h2) 的值,以及一个“保存”按钮,该按钮回发然后相应地设置文字。这有一个很大的警告。当页面在回发后加载时,文字没有改变。但是,如果我记录文字中实际设置的内容,则它具有新值。此外,如果我再次重新加载页面(F5),它会正确显示。

起初我认为它一定是 ViewState,所以我为所有控件禁用了它。我确认它没有保存在 ViewState 中(已解码)。所以 ViewState 没有保存旧值。

我正在使用“CreateChildControls”将我的控件添加到 Web 部件。回发由一个简单的事件处理程序处理。

有任何想法吗?

作为记录,我使用的是 MOSS 2007。

4

4 回答 4

3

听起来像是 ASP.NET 事件计时问题。尝试在页面加载事件中调用 EnsureChildControls()。这可确保在处理回发事件之前调用您的 CreateChildControls() 方法并将您的控件添加到页面。如果您的控件首先在 PreRender 或 Render 阶段添加,那么它们获取回发数据将为时已晚。在下一页加载之前,您将看不到更改。

于 2009-02-17T14:20:07.157 回答
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 回答