选择:jQuery插件...在asp.net中回发后无效

时间:2014-02-26 12:10:38

标签: jquery asp.net jquery-chosen

我在drop-down list中使用http://harvesthq.github.io/chosen/控件。一切都很顺利,但是我遇到了一个问题,比如如果我设置了下拉列表的属性,即AutoPostBack="true",在选择一个项目之后控件丢失其属性并转换为正常drop-down list

任何人都可以对此有所了解吗?请建议我。

由于

4 个答案:

答案 0 :(得分:11)

如果您要绑定$(document).ready();中的插件,请添加此代码并进行检查。

$(document).ready(function(){
//Binding Code
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    function EndRequestHandler(sender, args) {
        //Binding Code Again
    }
});

答案 1 :(得分:3)

尝试添加此代码,

 <script type="text/javascript">
    $(document).ready(function () {
        Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoaded)
    });

    function PageLoaded(sender, args) {
        $("#dropdownid").chosen();
    }

</script>

因为在每个帖子中,后退下拉列表将刷新并且所选择的绑定将丢失。您需要在每个回发中绑定它

答案 2 :(得分:1)

前几天我确实遇到了这个问题。它总是痛苦地找到答案,所以我将在这里总结一下。

AJAX调用完成后,不再触发DOMReady事件。我所做的是将此代码添加到页面中..

// handlers for msajax
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(function (sender, args) {

    try {
        args.get_request().set_userContext(args.get_postBackElement().id);
        $(window).trigger("beginMsAjaxRequest", [sender, args, args.get_postBackElement().id]);
    } catch (e) { }

});


Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function (sender, args) {

    try {
        if (args.get_error() == undefined) {
            var sName = args.get_response().get_webRequest().get_userContext();
            $(window).trigger("endMsAjaxRequest", [sender, args, sName]);
        }
    } catch (e) { }

});

它的作用基本上是扩展内置的.NET AJAX事件以使用jQuery。但是它会返回id的{​​{1}}或发起AJAX请求的任何内容,允许您仅定位其中的控件,以便您的插件可以更新它。

示例如下..

UpdatePanel

希望能够很好地解释......

编辑:

您还可以使用begin事件执行任何操作,例如隐藏元素或禁用它们等等......

$(window).on("endMsAjaxRequest", function(event, sender, args, sName) {

    // sname is the id of the UpdatePanel, so..
    $('.my-dropdown', '#' + sName).theDropDownPluginInit();

});

答案 3 :(得分:1)

<强>原因: 所有jQuery插件都应用于HTML页面的Page Load事件,或者换句话说,文档就绪事件,当整个页面或文档完全在浏览器中呈现时触发。现在,jQuery在应用插件时为所有控件分配唯一标识。但是当一些控件在UpdatePanel内部并且发生部分PostBack时,jQuery分配的Unique Ids会丢失,因此插件会停止工作

<强>解决方案: 这个问题的解决方案是每次UpdatePanel的异步请求或部分PostBack完成时我们需要重新应用jQuery插件。为此,我们可以利用ASP.Net Framework提供的事件处理程序来检测UpdatePanel的异步请求或部分PostBack的完成。

<强>代码

  //On UpdatePanel Refresh
  var prm = Sys.WebForms.PageRequestManager.getInstance();
  if (prm != null) {
      prm.add_endRequest(function (sender, e) {
          if (sender._postBackSettings.panelsToUpdate != null) {

              for (var selector in config) {
                  $(selector).chosen(config[selector]);
              }

          }
      });
  };

将此添加到您的javascript部分