代码之家  ›  专栏  ›  技术社区  ›  noocyte

使用回发正确实现Web部件?

  •  6
  • noocyte  · 技术社区  · 17 年前

    我想做的是创建一个Web部件,它有一个文本框,您可以在其中设置Web部件上的文本值(h2)和一个“保存”按钮,该按钮可以发回,然后相应地设置文本。这是一个巨大的警告;当页面在回发后加载时,文字未被更改。但是,如果我记录在文本中实际设置的内容,它将具有新值。此外,如果我再次重新加载页面(F5),它将正确显示。

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

    为了记录在案,我使用的是MOSS 2007。

    4 回复  |  直到 17 年前
        1
  •  3
  •   Lars Fastrup    17 年前

    听起来像是ASP.NET事件计时问题。尝试在页面加载事件中调用EnsureChildControl()。这样可以确保在处理回发事件之前调用CreateChildControls()方法并将控件添加到页面。如果控件是在“预渲染”或“渲染”阶段首次添加的,则它们拾取回发数据将为时已晚。在下一页加载之前,您将看不到更改。

        2
  •  1
  •   Flo    17 年前

    也许这篇博文可以帮助你更好地理解Web部件的生命周期并解决你的问题。 http://platinumdogs.wordpress.com/2008/10/14/sharepoint-webpart-lifecycle-events/

        3
  •  0
  •   JamesM    17 年前

    runat="server" 在你的文字控制上。您应该能够添加对页面加载事件的更改,并且该更改应显示在Web部件上。

        4
  •  0
  •   Øyvind Skaar    16 年前

    这里有一个建议。不管怎么说,这对我来说很管用。

    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);
            }
        }
    }