2009-09-24 16 views
0

Есть ли проблемы с использованием анонимных типов с помощью метода Json() в asp.net mvc?Анонимные типы и JsonResult в ASP.NET MVC

У меня недавно возникла проблема, когда возвращался анонимный тип из Linq. First() не работал, когда возвращался вызывающему jQuery. Я создал простой подкласс внутри моего контроллера и простые назначенные значения из объекта запроса и, казалось, сериализовал и работал нормально.

Это сработало:

public class JsonJob 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public DateTime DateAdded { get; set; } 
    public DateTime? DateModified { get; set; } 
}; 

var jsonJob = from job in db.Jobs 
       where job.Id == jobId 
       select new JsonJob 
       { 
        Id = job.Id, 
        Title = job.Title, 
        Description = job.Description, 
        DateAdded = job.DateAdded, 
        DateModified = job.DateModified 
       }; 

return Json(jsonJob.First()); 

Но это не сделал:

var jsonJob = from job in db.Jobs 
       where job.Id == jobId 
       select job; 

return Json(jsonJob.First()); 
+1

Опишите «не работает» более подробно –

+0

Не удалось запустить обратный вызов успеха. Код контроллера вызывается успешно. – James

ответ

2

Ваш второй запрос не возвращает анонимный тип. Вероятно, он возвращает тип сущности (сгенерированный генератором кода DataContext из файла DBML), который может иметь кучу вещей, которые вам не нравятся. Возвращение анонимного типа не должно вызывать проблемы, как метод Json не заботится об имени типа вообще:

// anonymous type example: 
var jsonJob = from job in db.Jobs 
       where job.Id == jobId 
       select new { // Note that no class name is specified here 
       job.Id, 
       job.Title, 
       job.Description, 
       job.DateAdded, 
       job.DateModified 
       }; 
+0

Если я делаю «select new {Id = job.Id, Title = job.Title}; ' конечный результат тот же. Использование определенного определенного типа, похоже, работает. – James

+0

James: Каков конечный результат? –

+0

Успешный обратный вызов со страницы никогда не вызывается. Так что что-то делает угасать $ .getJSON. – James

2

Я знаю, что это старый один, но у меня была эта проблема, и это первый решение в Google; это не было связано с анонимным классом - просто потому, что я забыл вернуть свои результаты с помощью AllowGet, например.

return Json(result, JsonRequestBehaviour.AllowGet); 

Хотя он не бросает C# ошибки, вы можете легко подтвердить это с помощью левши в функции Application_Error() в Global.asax.cs или увидеть ошибку 500 в Fiddler.

+0

Работал для меня, минус «u» в поведении – jamier

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