【问题标题】:Handling Postback within a Webpart in Sharepoint在 Sharepoint 中处理 Webpart 内的回发
【发布时间】:2011-04-18 08:39:36
【问题描述】:

我正在通过代码将 GridView、文本框和按钮初始化到 CreateChildControls() 中的 Webpart

上述控件被声明为类变量,但只是稍后才初始化。

接下来,我给出了按钮单击的处理程序。处理函数应该用作搜索 - 对文本框中输入的内容执行一些操作,在 Gridview 中加载结果,显示 Gridview

当我在文本框中输入内容并点击按钮时,相同的控件会再次加载,并且在文本框中输入的内容会丢失。我试过 ViewState() 和 ViewState() 但无济于事。网格没有显示,因为我的逻辑跳过尝试绑定它,因为没有合适的搜索字符串。

我的问题: 1)我在哪里/如何从文本框中获取回发值? 2) 在 PreRender() 中填充 GridView 是否有意义,或者事件处理会在 PreRender() 之后发生吗?

编辑: 似乎没有调用事件处理程序。

Dim btnClickHandler = New EventHandler(AddressOf SetSearchParameter)
AddHandler srchBtn.Click, btnClickHandler

对吗?

编辑: 我从 0 中重新编写了所有代码。它现在可以工作了。

【问题讨论】:

  • 按钮点击的处理程序也在 CreateChildControls() 中完成

标签: .net vb.net sharepoint postback web-parts


【解决方案1】:

这也总是让我感到困惑。我总是引用this question 以便弄清楚(也是control execution lifecycle)。

  1. 您不需要管理视图状态,应该由您的控件自动处理。

  2. 我建议使用 OnPreRender 填充您的网格。届时,您的控件的值应该由 ViewState 填充。

【讨论】:

  • 我之前提到过,但仍然不清楚。检查我对下一个答案的评论。 1) ViewState 即使是动态控件? 2) 我希望它仅在 Postback 上绑定 - 可以在 OnPreRender 中检查 Page.IsPostBack 吗?
  • 两个问题都是。您将在 CreateChildControls 中添加您的文本框和按钮。然后,在 OnPreRender 中,您可以查看 IsPostBack(并且您的 textbox.Text 有一个值),然后添加您的网格/数据绑定。
  • 好的,谢谢!我现在使用自己的标志 - 更改 Personalizable 值也会导致回发,并且在这种情况下可能并不总是设置某些值
  • 请注意,如果 Web 部件只是添加到窗格中,则 IsPostBack 有点没用,因为添加控件的逻辑是作为页面回发发生的。
【解决方案2】:

您应该能够在按钮单击的事件处理程序中引用控件值,具体取决于如何构建它们的静态/动态。 (textbox)Page.FindControl('controlname').value 在按钮单击的事件处理程序中。

呃... this.findcontrol。

我是从内存中执行此操作的,因此语法可能会关闭。

【讨论】:

  • 根据stackoverflow.com/questions/1648447/… 和许多其他资源,在回发事件处理之前调用 CreateChildControls() - Page.FindControl() 不会调出新控件吗?我确实尝试过,但仍然无法获得这些值。
  • 重读您的评论后,我没有使用您用来创建事件处理程序的方法。我一直创建我的方法并将点击事件绑定到该方法。下面是一个用于动态创建控件的简单事件处理程序的代码示例。
  • 按钮 submitButton = (Button)this.FindControl("submit"); submitButton.Click += new EventHandler(SubmitContactForm);这是方法 submitContactForm protected void SubmitContactForm(object sender, EventArgs e) {....} 在我使用的方法中,在我的情况下,它是我知道是标签的动态表单字段。 // 获取控件名称对象 ctrl = FindControl(controlName); string controlValue = ((TextBox)ctrl).Text;
  • 谢谢。但突然之间,我的方法似乎现在奏效了!我删除了所有代码并重新开始 - 也许我错过了其他东西。
猜你喜欢
  • 2011-02-27
  • 1970-01-01
  • 2010-10-09
  • 2011-10-24
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
相关资源
最近更新 更多