2012-02-19 4 views
3

Я использую этот код для доступа к моему серверу (MVC), и эта работа прекрасна. В результате «данные» ({«Id»: 30, «Описание»: «Образцы фотографий», «Имя»: «Первая галерея»}) Я пытаюсь получить данные свойства. Имя и это просто ничего не возвращает, что такое проблема в этом коде?Json result is nothing

JavaScript

$(function() { 
     $('#UserGaleries_').change(function() { 
      try { 

       if ($(this).val() == -1) { 

        $('#NameGaleriesEdit').val(''); 
        $('#DescriptionGaleriesEdit').val(''); 

       } 
       else { 
        $.post('/UserGaleries/ChangeCategorie', 
         { selectedID: $(this).val() }, 
         function (data) { 
          alert(data.Name); //Nothing 
          $('#NameGaleriesEdit').val(data.name); 
          $('#DescriptionGaleriesEdit').val('asdf'); 

         }); 
       } 
      } catch (e) { 
       alert(e); 
      } 

     }); 
    }); 

MVC

[Serializable] 
public class ResponsetModel 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
    public string Name { get; set; } 
} 

public JsonResult ChangeCategorie(int selectedID) 
{ 
    DbLayer.UserGaleriesManager uc = new DbLayer.UserGaleriesManager(); 
    DbLayer.Models.UsersGalery cat = uc.GetGaleriesById(selectedID); 

    ResponsetModel retValue = new ResponsetModel() 
    { Id = cat.Id, Name = cat.Title, Description = cat.Description }; 

    JsonResult oView = Json(retValue, "text/plain", System.Text.Encoding.UTF8, JsonRequestBehavior.AllowGet); 
    return oView; 
} 
+0

Ваш метод действия ChangeCategories нуждается в атрибуте HttpPost – Jon

+1

@Jon. Это неверно. – gdoron

+0

Не знаете тайны JavaScript, но попробовали ли вы вызов данных() вместо имени? –

ответ

3

При использовании post() метода без указания ожидаемого типа контента, то data будет просто строка, содержащая JSON (в отличие от объекта JavaScript). Сделайте alert(data), чтобы убедиться в этом.

Переписать этот пост, как

$.ajax({ 
    url:'/UserGaleries/ChangeCategorie', 
    data:{ selectedID: $(this).val() }, 
    method:"POST", 
    dataType:"json", 
    success:function (data) { 
     alert(data.Name); 
    } 
}); 

В качестве альтернативы вы можете использовать $.getJSON(), но я не уверен, если вы можете сделать это выполнить запрос POST.

+0

Спасибо, эта работа хорошо. – AFetter

2

Можете ли вы попытаться установить dataType в $ .post() на "json". Проверьте пример в [документации]. 1

также data.Name не data.name.

Что-то вроде этого:

$.post('/UserGaleries/ChangeCategorie', 
              { selectedID: $(this).val() }, 
              function (data) { 
                            alert(data.Name); 
                            $('#NameGaleriesEdit').val(data.Name); 
                            $('#DescriptionGaleriesEdit').val('asdf'); 

              }, "json"); 

Важная рекомендация: Используйте Firebug, чтобы проверить, что это точный ответ от сервера приложений.

-1

Попробуйте использовать другой способ доступа к данным. Использовать данные [«Имя»]

+1

Я не думаю, что это будет иметь значение ... data ["Name"] и data.Name должно быть таким же, если dataType - json. –

1

Вы также можете проанализировать данные JSON после его возврата с помощью JSON.parse(result).

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