我有一个可视化的Web部件(沙盒)可视化用于添加子站点的表单。添加子站点时,会在导航和DropDownlist中添加子站点(用于删除目的......)。
我的问题是,在回发后一切正常,除了我必须手动重新加载页面以查看新的更改(导航和下拉列表)。请注意, Response.Redirect 或 UpdatePanel 都不适用于沙盒解决方案。
任何人都能解决这个问题?
答案 0 :(得分:3)
执行回发时,浏览器会将所有Web控件的内容提交给服务器。从这个意义上讲,服务器是无状态;控件的状态实际存储在浏览器中。我会说你的问题出现是因为没有从SharePoint对象模型填充Web控件。相反,服务器使用接收的数据作为回发。或者,人口甚至可能发生,但回发数据将覆盖控件的内容。
解决方案是在从回发数据填充控件之后刷新控制数据。例如,您可以在 OnPreRender 方法中执行此操作。调用OnPreRender时,所有回发数据都已处理完毕。
尝试在webpart类中添加以下代码。
protected override void OnPreRender(EventArgs args)
{
if (this.Page.IsPostBack)
{
// Repopulate controls here
}
}
当然,问题在于,重新填充会杀死控件的先前(回发)状态。因此,如果要保留控件的当前值(例如下拉列表选择),则必须在重新填充之前保存它并手动将其还原。
要了解有关ASP.NET中页面生命周期的更多信息,请参阅ASP.NET Page Life Cycle Overview。