1

При вводе ключа в поле автозаполнения я возвращаю ключ, пару значений из контроллера MVC в формате JSON.parse JSON in jquery Autocomplete

public ActionResult UserNameAutoComplete(string term) 
{ 
    DBEntities db = new DBEntities(); 

    ...codes to get data from database 

    jsonString += jSearializer.Serialize(userList); 
    return Json(jsonString, JsonRequestBehavior.AllowGet); 
} 

retruned Json Строка [{ "UserId": "1", "имя_пользователя": "администратор"}, { "UserId": "3", "имя_пользователя": "newtonsheikh"}]

В представлении я получаю это

enter image description here

JQuery является

$("#Username").autocomplete({ 
    source: '@Url.Action("UserNameAutoComplete")' 
}); 

Мой вопрос как я могу ра rse это вернуло json? Ожидаемый выход: enter image description here

+0

Что jSearializer – Satpal

+0

System.Web.Script.Serialization.JavaScriptSerializer jSearializer = новый System.Web.Script.Serialization.JavaScriptSerializer(); объект данного класса –

+0

Вам это не нужно – Satpal

ответ

0

Вы пытаетесь выполнить сериализацию своих данных в два раза. Вы должны использовать

return Json(jsonString, JsonRequestBehavior.AllowGet); 

без (!) JSerializer.

или если вы хотите сделать это с помощью сериализатора попробуйте вернуть только содержимое ваших сериализованного набора данных

jsonString += jSearializer.Serialize(userList); 
return Content(jsonString); 
6

решить эту проблему. Мне пришлось изменить код jquery. Нет необходимости изменять код для возврата строки json.

$("#Username").autocomplete({ 
     select: function (e, ui) { 
      $("#Username").val(ui.item.label); 
      return false; 
     }, 

     source: function (request, response) { 
      $.ajax({ 
       url: '@Url.Action("UserNameAutoComplete")', 
       data: request, 
       success: function (data) { 
        var ParsedObject = $.parseJSON(data); 
        response($.map(ParsedObject, function (item) { 
         return { 
          label: item.UserName, 
          value: item.UserId 
         }; 

        })) 
       } 
      }); 
     } 
    });