如何在ASP.net自定义控件中处理PostBack

3

也许我在实现自定义控件时缺少重要的东西,或者缺乏知识。实际上,我已经创建了一个用于搜索目的的自定义控件(.dll),其中包含3个下拉框(从数据库填充)、1个文本框和搜索按钮。当用户选择适当的筛选条件并单击搜索按钮后,会出现一个简单的网格视图。我的问题是,我不想在每次页面回发时都填充自定义控件中的下拉框。


2
你在 Page_Load 事件中检查控件的 IsPostBack 属性了吗? - Tim
我无法获取IsPostback属性,我实现了重写void OnInit(EventArgs e)和override void CreateChildControls()方法。 - Vishwanath Mishra
1个回答

2

当你在无法找到页面的位置时,可以使用这个全局参数:

System.Web.HttpContext.Current

现在,如果可用,您可以获取页面。
Page page = HttpContext.Current.Handler as Page;

if (page != null && page.IsPostBack)
{

}

或者您可以使用以下方法获取表单和回传值:

System.Web.HttpContext.Current.Request.Form

如果表单具有值,则可能是回传(post back)。

请注意,在使用System.Web.HttpContext.Current之前,始终检查它不为空,因为如果您从线程调用它并且没有可用页面,则为null


1
嗨Aristos!感谢您的回答,现在我已经得到了PostBack,但我的问题仍然存在。当第二次调用CreateChildControls()时,如果不加载下拉框中的值,它就会丢失。 - Vishwanath Mishra
1
@VishwanathMishra 也许这个控件的视图状态被禁用了(或者你没有在视图状态中保存这些控件)。 - Aristos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接