2015-05-19 3 views
0

Я хочу передать сложный объект из метода контроллера обратно на мой вызов Ajax. Насколько я знаю из нескольких исследований, JSON - это выбор.Обработка данных JSON в Ajax Sucess Handler

Вот мой контроллер метод:

public JsonResult GetUserByData(string fn, string ln, string dep, string cc, string tel, string mail) { 
     IList<Models.Person> userCollection = Models.Person.GetPersonsByData(fn, ln, dep, tel, cc, mail).ToList(); 
     if (userCollection.Count > 1) { 
      return Json(new { Complex= true, HTML = PartialView("SomeView.cshtml", userCollection) }); 

     } 
     else { 
      return Json(new { Complex = false, HTML = PartialView("SomeOtherView.cshtml", userCollection.First()) }); 
     } 

Вот мой Ajax вызов:

$.ajax({ 
      url: 'Home/GetUserByData', 
      type: 'POST', 
      dataType: 'html', 
      data: { 
       fn: firstname, 
       ln: lastname, 
       dep: department, 
       cc: costcenter, 
       tel: telephone, 
       mail: mail 
      }, 
      success: function (data) { 
       if (data.Complex) 
        $('#Customer_Person').html(data.HTML); 
       else 
        $('#Notification_Area').html(data.HTML); 
      } 
     }); 

Назад в моем сценарии, кажется, что свойства «Комплекс» и «HTML» не может быть доступен - Что я делаю неправильно? Является ли это лучшим подходом к передаче сложных объектов или есть ли другие способы сделать это?

+0

Вы проверили, какой ответ действительно возвращен в средствах браузера 'developer'? – Pawan

+1

Возможный дубликат [MVC Return Partial View as JSON] (http://stackoverflow.com/questions/4730777/mvc-return-partial-view-as-json) –

ответ

3

Поскольку вы указываете тип возвращаемого значения как HTML (dataType: 'html'), jQuery обрабатывает ответ как строку (а не JSON), поэтому data.Complex ничего не оценит. Если вы попытаетесь проанализировать данные как JSON, это, скорее всего, будет ошибкой, так как HTML и JSON не очень хорошо сочетаются. Я бы предложил сначала вернуть JSON и сделать последующий вызов HTML или просто выбрать правильный шаблон на сервере и только отправить HTML.

Редактировать: @Savaratkar верен, вы также можете кодировать/удалять свой HTML и передавать его через JSON.

+0

О, моя ошибка - убедитесь, что тип данных необходимо изменить от html до json. К сожалению, не так просто разделить эти данные на разные вызовы, потому что 1. В зависимости от логического значения данные должны размещаться на разных участках моего сайта, 2. Мой метод контроллера ищет AD для некоторых записей - я бы предпочел сохранить нагрузка на AD как можно ниже (так что вызов второго метода, который будет передавать фактические данные, будет возможен, но менее эффективен). – C4p741nZ

+1

Используйте простой метод кодирования для вашей строки html и декодируйте его обратно на своем клиенте. – Savaratkar

+0

Я искал некоторые методы для рендеринга PartialView как строки, но никогда не удался - можете ли вы снова помочь? Заранее спасибо! – C4p741nZ

Смежные вопросы