确定在使用多个更新面板时需要在页面加载时重新创建哪些控件

时间:2011-07-12 16:29:17

标签: c# asp.net asp.net-ajax

我有一个包含多个更新面板的页面,每个面板都包含动态创建的包含按钮控件的用户控件。

单击控件中的按钮时,页面加载事件中不再存在控件,因此无法引发控件中按钮的单击事件。

为了解决这个问题,我目前正在每个页面加载事件中重新创建页面上的所有控件,但这显然会导致大量不必要的页面更新。在任何给定的部分回发中,需要重新创建的唯一控件是更新面板中包含已单击的控件的控件。

如何才能最好地确定在page_load中单击了哪个控件,然后只重新创建相关更新面板中的控件,然后才能访问该控件的click事件?

我知道我可以做以下事情

if (ScriptManager1.IsInAsyncPostBack)
{
   string clickedControlId = ScriptManager1.AsyncPostBackSourceElementID
}

但这并不是非常有用,因为知道控件的ID并不一定能帮助我识别它所属的更新面板。有没有办法在控件运行时创建命令参数并在部分回发期间在页面加载事件中读取该命令参数?

如果没有,还有其他建议吗?

非常感谢

斯图尔特

1 个答案:

答案 0 :(得分:1)

1)停止使用更新面板,它们会增加不必要的复杂程度,从而产生比值得多的问题,尤其是当您在页面中有多个问题时。

2)远离将Ajax功能与服务器端逻辑混合使用。你最终会编写很多代码来补偿其中一个。

我建议:

请勿使用更新面板!
保留生成初始页面加载的代码。不使用.Net按钮发布到服务器,而是使用常规按钮并使用onClick =“foobar_ajax(id,... .Update UI)”进行ajax调用以更新服务器上的数据。包括您单击的项目(控件)的ID。当您的ajax调用完成后,您可能不需要执行任何操作,或者您可以使用服务器中的一些新数据更新UI(我建议在保存后刷新)。

阅读:用jQuery调用页面方法。 http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/