【问题标题】:select2 with ajax MVC does not hit results option使用 ajax MVC 的 select2 不会命中结果选项
【发布时间】:2016-06-29 10:18:53
【问题描述】:

我使用select2 作为autocomplete 并选择多个选项。下面是我如何initializeselect2

$(".selectpickerphone").select2({
  allowClear: true,
  minimumInputLength: 2,
  ajax: {
    cache: false,
    dataType: "json",
    type: "GET",
    url: "@Url.Action("GetContactNumbers ", "HMController")",
    data: function(searchTerm) {
      return searchTerm;
    },
    results: function(data) {
      debugger;
      if (data.isUser) {
        return;
      }
      return {
        results: $.map([data], function(item) {
          return {
            text: item.name,
            id: item.PhoneNum,
            data: item
          }
        })
      };
    }
  },
  formatResult: function(response) {
    data = response.data;
    console.log(data);
    this.description =
      '<div id="fmu_select2_ajax_result">' +
      "<div>Nom du produit : " + data.name + "</div>" +
      "<div>" +
      "<div>" + data.PhoneNum+ "</div>" +
      "</div>" +
      '</div>';
    return this.description;
  },
  formatSelection: function(response) {
    data = response.data;
    return data.PhoneNum+ " - " + data.name;
  },
  escapeMarkup: function(m) {
    return m;
  },
  dropdownCssClass: "bigdrop"
});

下面是我的JsonResult - actionmethod

[HttpGet]
public JsonResult GetContactNumbers(string term)
{
    using (_db = new Context())
    {
        _adRep = new ADRP();
        var contactList = _adRep.FetchCustomerUserPhone(_db,term);
        return Json(contactList, JsonRequestBehavior.AllowGet);
    }
}

在网络标签中查看时,我得到以下响应。

[{"name":"Guruprasad Rao","isUser":true,"PhoneNum":"8495000049"},
 {"name":"Guruprasad Rao","isUser":false,"PhoneNum":"8495000050"},
 {"name":"Test","isUser":false,"PhoneNum":"8495000051"}]

但无论如何,我在ajaxresults 选项中放置的调试器没有被命中,因此也不会显示数据。我将如何接收它作为响应并显示它?

更新

我正在使用select2 v4.0.1

【问题讨论】:

  • 我会把它分解成更小的函数,这样你就可以看到哪些被正确调用了。解决任何问题后,您始终可以将其重新组合在一起...
  • @bukko 正如我所说,results 回调永远不会被击中。debugger 位于第一行。
  • 我假设你的控制器操作代码被调用了好吗?
  • 是的..它是..@bukko..这就是我得到结果的方式..
  • data 是一个对象数组,所以if (data.isUser) { 没有意义

标签: jquery ajax asp.net-mvc select2


【解决方案1】:

我尝试将它绑定在 asp.net mvc 5 中。

我使用了 web services ,Controller Http post 方法,Web Api 2,但在 select2 的回调事件中没有使用。

使用Asp.net Generic handler 产生回调结果,然后尝试将其绑定到select2。

【讨论】:

    【解决方案2】:

    找到解决方案

    我不得不在$.ajax 中使用processResults 而不是results。知道我什么时候真正访问了 official site。可能已经改成version &gt; 4.0了。

    processResults: function(data) {
      return {
        results: $.map(data, function(item) {
          return {
            text: item.name,
            id: item.PhoneNum,
            data: item
          }
        })
      };
    }
    

    在上述版本之后,formatResultformatSelection 已更改为 templateResulttemplateSelection

    Docs here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      • 2016-04-10
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 2013-06-12
      相关资源
      最近更新 更多