我有一个自定义的webpart,它扩展了System.Web.UI.WebControls.WebPart并实现了一个EditorPart。
我已经在重写的CreateChildControls方法中添加了所有静态控件,因为我知道这使得它们在PostBacks中保持不变。
但是,我在重写的OnPreRender方法中添加了一些TextBox,因为我添加的实际TextBox取决于我在OnPreRender中调用的Web Service返回的数据。必须在OnPreRender中调用Web服务,因为我需要在EditorPart中设置一些Property值。如果我将此逻辑构建到CreateChildControls方法中,显然在应用编辑后第一个PostBack上的数据不可用,因为在CreateChildControls之后恢复了PostBack事件。这意味着在刷新数据之前必须将页面发布两次,这只是笨拙的。
如何让这些TextBox及其输入的文本值在PostBacks中保持不变,以便我可以在按钮处理程序中访问它们?
感谢您的帮助, 马特
答案 0 :(得分:0)
这最终为我工作:
因为在CreateChildControls中添加了“隐藏”TextBox,所以它的值将被恢复并可以在PostBack上访问。
希望这可以帮助那些人,我知道我在这个上花了一些时间。
答案 1 :(得分:0)
FWIW,您可以直接在ViewState中存储值,而无需通过TextBox控件中的代理访问它。在这个片段中,我将访问视图状态包含在普通旧属性中:
public string WebServiceResult
{
get
{
string text = (string) ViewState["WebServiceResult"];
if (text != null)
return text;
else
return string.Empty;
}
set
{
ViewState["WebServiceResult"] = value;
}
}