jquery - Autocomplete returning 500 error -
i having problem getting search form autocomplete in mvc4 razor, using jquery , ajax.
my html form
@using (html.beginform()) { @html.textbox("frienslist") <input type="submit" value="go" /> }
my js script
$(document).ready(function () { $("#frienslist").autocomplete({ source: function(request,response) { $.ajax({ url: "/user/friendlist", type: "post", datatype: "json", data: { term: request.term }, success: function (data) { response($.map(data, function (item) { return { label: item.label }; })) } }) }, minlength: 1, delay: 1000 }); })
and controller
public actionresult friendlist(string term) { using (var db = new dbcontext()) { var result = db.userprofiles .where(r => r.firstname.contains(term)) .take(10) .select(r => new {label = r.firstname}); return json(result, jsonrequestbehavior.allowget); } }
debugging code, can see enters action when type letter search box, returns correct data database, when ajax receives response, seems give 500 error.
i have ensured script being loaded after js bundles , added minlength , delay parameters suggested in similar question asked.
thanks help.
edit 1
i changed controller
public actionresult friendlist(string term) { using (var db = new dbcontext()) { var result = db.userprofiles .where(r => r.firstname.contains(term)) .take(10) .select(r => new {label = r.firstname}); var ser = new javascriptserializer(); var tests = ser.serialize(result); return json(tests, jsonrequestbehavior.allowget); } }
now when search load of li tags under searchbox. doesnt print text, seems repeating on isn't results
edit 2
i changed return
return json(tests, "label", jsonrequestbehavior.allowget);
and following ajax
return { label: item};
and prints out each separate character in separate line, including json brackets
json
method internally serializes data json format, dont have explicitly serialize data.
//var ser = new javascriptserializer(); //var tests = ser.serialize(result); return json(result.tolist(),jsonrequestbehavior.allowget);
the first draft did not work because result
of type iqueryable<t>
not data query expression. explicitly collect data query expression .tolist()
method needs called, hence result.tolist()
.
hope helps.
Comments
Post a Comment