将数据从C#返回到jQuery UI自动完成

将数据从C#返回到jQuery UI自动完成,c#,jquery,ajax,asp.net-mvc,jquery-ui,C#,Jquery,Ajax,Asp.net Mvc,Jquery Ui,我想用数据库中的数据填充我的自动完成。 因此,我用c#编写了一个从db读取的方法: public string[] GetNames() { var names = unitOfWork.deviceRepository.Get().Select(w=>w.Name); return names.ToArray(); } 这个很好用。所有需要的数据都在名称中 现在,我使用Ajax将这些数据传送到客户端: $(function () { var availableT

我想用数据库中的数据填充我的
自动完成
。 因此,我用c#编写了一个从db读取的方法:

public string[] GetNames()
{
    var names = unitOfWork.deviceRepository.Get().Select(w=>w.Name);
    return names.ToArray();
}
这个很好用。所有需要的数据都在名称中

现在,我使用Ajax将这些数据传送到客户端:

$(function () {
    var availableTags;
    $.ajax({
        url: "/DeviceUsage/GetNames",
        type: "GET",
        error: function (data) {
            alert("wystąpił nieokreślony błąd " + data);
        },
        success: function (data) {
            console.log(data);
            availableTags = data;
        }
    })
    $("#deviceName").autocomplete({
        source: availableTags
    });
});
如您所见,我将离开
数据类型
进行智能猜测。 但是console.log in success在控制台中写入
System.String[]
,而不是
GetNames
中的数据。
有人能建议我如何修改代码以获得自动完成工作吗?

数据类型不适用于C#或MVC或服务器端,这是告诉jQuery您正在使用json响应,jQuery应该解析它。由于您没有提供它,jQuery将不会解析它,因此数据只是一个字符串。如果需要json,请提供它或使用
json.parse
解析数据字符串

或-

$.ajax({
        url: "/DeviceUsage/GetNames",
        type: "GET",
        dataType: "json",
        error: function (data) {
            alert("wystąpił nieokreślony błąd " + data);
        },
        success: function (data) {
            console.log(data);
            availableTags = data;
        }
    })

而且,您也不必等到ajax完成后再分配-

$("#deviceName").autocomplete({
        source: availableTags
    });
您应该等待ajax完成,所以在success中执行此调用,如下所示-

success: function (data) {
            //do proper parsing as mentioned earlier
            availableTags = jsonData;
            $("#deviceName").autocomplete({
                 source: availableTags
             }); 
        }

因为在调用时,availableTags中没有任何内容。

数据类型
不适用于C#或MVC或服务器端,这是告诉jQuery您正在使用json响应,jQuery应该解析它。由于您没有提供它,jQuery将不会解析它,因此数据只是一个字符串。如果需要json,请提供它或使用
json.parse
解析数据字符串

或-

$.ajax({
        url: "/DeviceUsage/GetNames",
        type: "GET",
        dataType: "json",
        error: function (data) {
            alert("wystąpił nieokreślony błąd " + data);
        },
        success: function (data) {
            console.log(data);
            availableTags = data;
        }
    })

而且,您也不必等到ajax完成后再分配-

$("#deviceName").autocomplete({
        source: availableTags
    });
您应该等待ajax完成,所以在success中执行此调用,如下所示-

success: function (data) {
            //do proper parsing as mentioned earlier
            availableTags = jsonData;
            $("#deviceName").autocomplete({
                 source: availableTags
             }); 
        }

因为在调用时,
availableTags
中没有任何内容。

如果您只是希望返回一个逗号分隔的字符串作为返回值,那么可以更改
GetNames
函数以返回
字符串,并使用
string.Join
函数压缩数组

return String.Join(", ", unitOfWork.deviceRepository.Get().Select(w=>w.Name).ToArray());

但我个人建议使用某种类型的
json
值响应,并返回一个字符串数组作为
json字符串
(很容易被JavaScript解析)

类似于(使用newtonsoft json.net,未测试以下示例):


如果您只是希望以逗号分隔的字符串作为返回值,则可以将
GetNames
函数更改为返回
字符串
,并使用
字符串.Join
函数对数组进行concat

return String.Join(", ", unitOfWork.deviceRepository.Get().Select(w=>w.Name).ToArray());

但我个人建议使用某种类型的
json
值响应,并返回一个字符串数组作为
json字符串
(很容易被JavaScript解析)

类似于(使用newtonsoft json.net,未测试以下示例):


将GetNames WEB API调用的返回设置为JSONResult,并在返回之前将字符串数组转换为JSon。Ajax不知道如何处理C#/.Net CLR类。请参阅本教程的工作示例,使GetNames WEB API的返回调用JSONResult,并在返回之前将字符串数组转换为JSon。Ajax不知道如何处理C#/.Net CLR类。请参阅本教程中的工作示例,我试图让它工作,但我能得到的是Cannon将字符串隐式转换为JsonresultThink,您可以显示调用
GetNames()的函数
function?我试着让它工作,但我能得到的是Cannon隐式地将字符串转换为JsonresultThink您能在调用
GetNames()
函数的地方显示该函数吗?