将多个控件放在更新面板中的正确方法是什么?

我有一个注册表单,其中包含3到4个下拉控件和2个日期选择器,现在当选择下拉控件值时(选择索引更改被触发)然后我不希望我的页面回发。

我使用更新面板来阻止这种post的行为,如下所示:

                  

所以我只是想问一下,这是在更新面板下放置多个控件的正确方法吗?

在客户端订阅initializeRequest ajax事件。 在这种情况下,如果需要,我们可以取消ajax回发。

在处理异步请求开始之前引发initializeRequest方法。 您可以使用此事件取消回发。

在这种情况下,我们将检查是否由于ddlCountry而启动了异步回ddlCountry ,如果是,则我们取消ajax回发,因此不会发回。

要解决您的问题,请执行以下操作将以下JavaScript添加到您的aspx页面。 在下面的代码中,当浏览器加载页面并且在加载所有脚本以及创建的所有客户端对象之后,客户端ASP.Net Framework会自动调用pageLoad方法。

JavaScript取消combobox回发

  

以下只是建议,而不是解决您的特定问题的一部分 :另外,我建议远离nested update panels因为如果开发人员不知道嵌套更新面板如何工作,这可能会导致意外结果。 在您的情况下,单个更新面板应该足够像下面的标记,而不是您在原始标记中使用的嵌套更新面板。

没有嵌套更新面板的标记

         

老实说,我发现的UpdatePanel比它的价值更麻烦。

UpdatePanel控件是ASP.NET中Ajaxfunction的核心部分。 它们与ScriptManager控件一起使用以启用部分页面呈现。 当只有部分页面需要更新时,部分页面呈现减少了对同步回发和完整页面更新的需求。 部分页面呈现改善了用户体验,因为它减少了整页回发期间发生的屏幕闪烁并改善了网页交互性。

我经常发现控件实现会导致更多问题然后值得。 所以我经常实现自己的Ajax服务来处理这样的逻辑。 你可以用旧学校的方式做到这一点,非常简单。

 // Create .aspx page, to be our service. public class ControlUpdateService { protected void Page_Load(object sender, EventArgs e) { // Use an approach to determine which control type, and model to build. // You would build your object, then use Newtonsoft.Json, to serialize, then // return the object, via Response.End(object). } } 

然后你的页面将Ajax数据,命中服务,然后通过Ajax调用中的.success构建你的控件。 如果采用这种方法,您也承诺通过Ajax保存数据。 记在脑子里。 当我回答这个问题时,我不禁感到你的问题实际上源于对AutoPostback的控制。 哪个你可以实际禁用。

 AutoPostBack = "false"; 

Telerik可能不同,但文档应清楚地指出如何禁用此function。 这将完全满足您对UpdatePanel的需求。 允许您在PostBack正确保存数据。

使用telerik Ajaxloadingpanel(UpdatePanel除外)这对你的代码有好处试试这个例子