我将JSON从我的控制器返回到我的视图,以便在MVC中填充jquery自动完成文本框。问题是,我的一些数据包含逗号,因此被自动完成帮助程序拆分。
继承我的代码。
控制器:
public ActionResult GetData()
{
var data = repository.GetData();
return Json(data);
}
查看(脚本):
$.post("../MyController/GetData",
function(data) {
var evalData = eval(data) + ""; //formats the text
$("#Data").autocomplete(evalData.split(","),
{
max: 500,
matchContains: true
});
});
如您所见,我使用jquery .split帮助器来拆分返回的Json。我应该使用正则表达式还是应该使用完全不同的方法?
答案 0 :(得分:1)
我假设您使用Autocomplete内置的jQuery UI 1.8。如果你是,你有几个不同的选择。
根据文档中提供的其中一个示例,您可以给它一个字符串,指定您的服务的URL,而不必担心自己解析返回。所以有些东西:
$("#Data").autocomplete({
source: "../MyController/GetData"
});
您的操作很可能需要回复获取请求以及发布信息,您的数据可能需要采用[{ label: "something", value: "1" }, ... ]
的形式
在发送数据之前,您可以使用Linq查询对数据进行整形。
var data = from d in repository.GetData()
select new
{
label = d.[whatever you want the label to be]
value = d.[whatever you want the value to be]
};
return Json(data);
您可以将当前的实现与上面示例的部分内容结合起来,得到如下内容:
$.post("../MyController/GetData",
function(data) {
$("#Data").autocomplete({
source: JSON.parse(data),
max: 500,
matchContains: true
});
});
这假设数据采用[{ label: "something", value: "1" }, ... ]
的形式(有关如何使用Linq对其进行整形,请参阅1)。 JSON解析器将为您处理引号问题中的逗号。
您还可以在要检索数据时指定method to call。
$("#Data").autocomplete({
source: function(request, response) {
$.ajax({
url: "../MyController/GetData",
dataType: "json",
success: function(data) {
response( data );
}
})
}
});
(参见上文关于如何使用Linq来整形数据)
关于您当前实施的一些评论。
答案 1 :(得分:0)
好吧,经过多次来回和几次编辑是我的最终答案。 :)
$.post("../MyController/GetData", function(data) {
$("#Data").autocomplete({
source: data
})
});
另外,我相信split函数是普通的javascript而不是jquery。