从 ASP.Net 服务获取用于 select2 控件的 AJAX 结果

Posted

技术标签:

【中文标题】从 ASP.Net 服务获取用于 select2 控件的 AJAX 结果【英文标题】:Getting AJAX results from ASP.Net service for select2 control 【发布时间】:2014-08-26 01:51:19 【问题描述】:

我正在尝试通过从 ASP.Net Web 服务(网络表单)中提取信息来实现 Select2 控件。我在我的服务器代码中放置了一个断点,该方法被调用并返回信息,但 select2 控件从不显示信息,并且报告了 no 控制台错误(只是服务被击中并返回)。以下是所有信息:

C# Webservice(ListVar是一个有ValueText两个字符串属性的类):

public List<ListVar> SearchUsers(string searchText, string additionalFilter)

    return WebUserManager.SearchWebUsers(searchText, Boolean.Parse(additionalFilter));

JS

$(document).ready(function () 
    $('#O_M_aclUser_hfMain').select2(
        ajax: 
            cache: true,
            dataType: "json",
            type: "POST",
            url: 'http://localhost:54780/Services/Utilities.asmx/SearchUsers',
            data: function (term, page) 
                return 
                    searchText: term,
                    additionalFilter: $('#O_M_aclUser_hfAddFil').val()
                ;
            ,
            results: function (data, page) 
                alert('test1');
                return  results: data.d ;
            
        ,
        formatResult: FormatResults,
        formatSelection: FormatResults,
        dropdownCssClass: 'autoCompleteSelect2',
        escapeMarkup: function (m)  return m; 
    );
);

function FormatResults(result) 
    var markup = '<div class="AutoCompleteResult" entityValue="' + result.Value + '">';
    markup += result.Text;
    markup += '</div>';

    return markup;

回应

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfListVar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
  <ListVar>
    <Value>1</Value>
    <Text>Miles McGehee</Text>
  </ListVar>
  <ListVar>
    <Value>777</Value>
    <Text>Miles McGehee</Text>
  </ListVar>
</ArrayOfListVar>

为什么我的 JS 结果 ajax 方法没有被调用? (我从来没有看到警报消息) 为什么不显示信息

【问题讨论】:

您的响应是 xml 而不是 json。 它应该是任何特定的 json 格式吗? 没有特定的json格式。这取决于您的方法返回什么。在你的情况下,它可能是"ArrayOfListVar":["Value":"1","Text":"Miles McGehee","Value":"777","Text":"Miles McGehee"] 【参考方案1】:

您需要装饰您的服务方法,使其以 JSON 而不是 XML 响应

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<ListVar> SearchUsers(string searchText, string additionalFilter)

    return WebUserManager.SearchWebUsers(searchText, Boolean.Parse(additionalFilter));

select2 需要一种特殊的 json 格式。响应需要是一个列表 idtext 值,例如 "d":["id":"1","text":"hello","id":"2","text":"world"]

【讨论】:

以上是关于从 ASP.Net 服务获取用于 select2 控件的 AJAX 结果的主要内容,如果未能解决你的问题,请参考以下文章

如何从后面的 asp.net 代码中获取 Select2 值

使用 select2 与 ajax 调用 asp.Net 服务自定义参数

使用 asp.net 从后面的代码中获取 Jquery 的 Select2 的多个选定值

从 ASP .Net Web 表单后面的代码中获取 Select2 选定值

Select2 与 Ajax Asp.net 4.0 webmethod 请求

SELECT2 4.0 与 ASP.Net 中的多选:如何获取和设置所选项目?