我要做的是创建一个webpart,它有一个文本框,你可以在webpart上设置文字(h2)的值,然后发送一个“保存”按钮,然后相应地设置文字。这适用于一个巨大的警告;当页面在回发后加载时,文字未被更改。但是,如果我记录文字中实际设置的内容,则它具有新值。此外,如果我再次重新加载页面(F5),它会正确显示。
起初我认为它必须是ViewState,所以我为所有控件禁用了它。我确认它没有保存在ViewState中(解码后)。所以ViewState没有保存旧值。
我正在使用“CreateChildControls”将我的控件添加到webpart。回发由一个简单的事件处理程序处理。
有什么想法吗?
为了记录,我正在使用MOSS 2007。
答案 0 :(得分:3)
听起来像是一个ASP.NET事件计时问题。尝试在页面加载事件中调用EnsureChildControls()。这可确保在处理回发事件之前调用CreateChildControls()方法并将控件添加到页面中。如果您的控件首先在PreRender或Render阶段添加,那么他们接收回发数据将为时已晚。在下一页加载之前,您将看不到更改。
答案 1 :(得分:1)
也许这篇博文可能会帮助您更好地了解webpart的生命周期并解决您的问题。 http://platinumdogs.wordpress.com/2008/10/14/sharepoint-webpart-lifecycle-events/
答案 2 :(得分:0)
您可以随时使用AJAX更新面板,将文字控件放在其中,并在更新面板上调用UDP.Update。另外,通过初始示例检查,您的文字控件上有runat="server"
。您应该能够对Page_Load事件添加更改,这应该出现在webpart上。
答案 3 :(得分: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);
}
}
}