Попытка получить доступ к классу, переданному обратно через JSON

#asp.net-mvc #json

#asp.net-mvc #json

Вопрос:

Я вызываю эту функцию через объект JSON

     [AcceptVerbs(HttpVerbs.Get)]
    public JsonResult GetMatchDetails(int id)
    {
        var match = GetRepository<Match>().Get(id);

        return Json(match, JsonRequestBehavior.AllowGet);
    }
  

где соответствие var находится в классе (урезанная версия, но мне не нужно использовать остальные)

  public class Match : Entity
 {
    public virtual DateTime? MatchDate { get; set; }
    public virtual ICollection<Boxer> Boxers { get; set; }
    public virtual string Location { get; set; }
    public virtual MatchResult Result { get; set; }
    public virtual int Rounds { get; set; }
 }
  

и вызов из javascript (из вызываемой функции)

         var matchStuff = null;
        //Get a class which will have the Match and two boxers part of it
        $.getJSON("/BoxingPredictionLeague/GetMatchDetails/"   MatchId, function(data){
            matchStuff = data;
            alert(matchStuff.Id);

        });
  

Там, где предупреждение, я попытался выдать идентификатор, используя matchStuff[0].Идентификатор, а также набор совпадений.Идентификатор, но он вообще не выдает предупреждения… кажется, что просто происходит сбой или этот объект равен нулю!

Комментарии:

1. Предложение помочь в его отладке: Установите Firebug в Firefox, запустите его и просмотрите вкладку консоли, когда вы вызываете выполнение этого вызова JSON. Я не уверен, но я думаю, что он должен отображаться там с более подробной информацией о том, что произошло, чем предоставит отладчик VS .

2. ммм, я пытался установить точки останова в javascript как в Chrome, так и в firebug, но по какой-то причине это не срабатывает. Но код после этого действительно попадает. Поскольку у меня есть другой код, который продолжается, пока объект JSON ожидает возврата своих данных … может ли это быть как-то связано с этим?

Ответ №1:

Очевидные вопросы:

Вы уверены, что получаете объект, возвращенный из вашего репозитория?

Вы уверены, что существует свойство ‘Id’? (его нет в примере кода)

В противном случае:

Если вы используете chrome, вы можете сделать следующее, чтобы точно увидеть, что возвращается через Json.

  1. Инструменты перехода -> Инструменты разработчика
  2. Нажмите «Ресурсы»
  3. Под этими кнопками есть небольшая панель, нажмите на XHR.
  4. Слева вы увидите все вызовы ajax, инициированные страницей. Заголовки покажут, что вы отправляете; содержимое покажет, что вы получили. Содержимое является прямым JSON, но вы должны быть в состоянии определить его оттуда.

Если вы используете firebug:

  1. Откройте firebug с помощью значка в левом нижнем углу (убедитесь, что он включен)
  2. Перейдите на вкладку «Сеть»
  3. Под этими кнопками есть небольшая панель, нажмите на XHR.
  4. Вы увидите список всех вызовов ajax. развернув его, вы сможете увидеть как заголовки, так и ответ на содержимое.

Один из этих двух методов должен помочь вам отследить его — в противном случае все остальное выглядит корректно в вашем примере кода.

Комментарии:

1. ммм, кажется, мой папа не вернется к моему объекту json… нужно ли мне что-либо делать с моим классом, прежде чем я передам его обратно? обязательно ли это должна быть ICollection или что-то в этом роде?

2. Вы должны иметь возможность просто передать объект как есть, используя Json(…). Что отображается в вашем содержимом XHR как возвращаемое? Моя другая мысль заключается в том, что virtual ключевое слово может отключать функцию JSON. Есть ли причина, по которой они нужны вам в свойствах вашего объекта?