Стандартный способ вернуть JSON для просмотра - PullRequest
0 голосов
/ 25 февраля 2011

У меня есть представление с несколькими простыми полями и сеткой jQuery.Поля, которые я заполняю через мою модель, поэтому моей первой мыслью было попытаться заполнить мою сетку таким же образом.Дело в том, что после того, как я немного ударился головой о проблему, я начал задумываться, а не пытался ли я пойти против зерна.Кажется, что это общепринятая практика (и, что более важно, как все спроектировано), когда компоненты в представлении, которые используют json для своих данных, работают лучше всего, когда они могут сделать отдельный вызов для получения возвращаемого JSONResult, который они затем обработают.

Обычно это не было бы большим делом, но по различным причинам проверки будущего (не мое решение ... удовольствие от архитектора) у нас есть отдельный уровень WCF, который вызывает наш уровень MVC.Так что теперь я должен беспокоиться о том, чтобы делать слишком много гранулярных звонков.Это то, что на самом деле побудило меня попробовать популяционный подход на основе моделей.Что мне интересно, так это то, насколько распространен этот подход, или у всех есть просто набор методов контроллера, которые их компоненты пользовательского интерфейса вызывают для получения JSON?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2011

Самый общий способ вернуть json из действия - просто вызвать метод Json ().

return Json(viewModel);

Если вы специально возвращаете данные для jqGrid, вы можете использовать свой собственный ActionResult.Вот что мы используем.У нас также есть метод расширения для перевода этого результата из нашей оболочки службы подкачки.

public class TableResult : ActionResult
{
    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.Write(ToJqGridJson());
    }

    public object ToJqGridJson()
    {
        return new {total = Total, page = Page, records = Records, rows = Rows};
    }

    public int Total { get; set; }
    public int Records { get; set; }
    public int Page { get; set; }
    public object[] Rows { get; set; }
}

В контроллере:

return new TableResult() { ... };

или возвращаем queryResults.ToTableResult ();

Что касается будущего, даже не пытайтесь!В итоге у вас будет большой дизайн, и я гарантирую, что он не окупится.Мы выучили трудный путь и совсем недавно начали выбрасывать множество абстракций.Нет смысла писать код, если вы не знаете точно, как он будет использоваться в будущем.Кроме того, WCF можно легко заменить самим приложением MVC.MVC не должен возвращать только веб-сайты.Мы перешли на использование .net 4.0 javascript serializer + MVC + клиентский десериализатор javascript для предоставления веб-сервисов.Вы можете поделиться аутентификацией, которую вы уже написали для MVC, плюс все ваши фильтры и т. Д., И вам не нужно беспокоиться о настройке отвратительного беспорядка WCF.Посмотрите, куда движутся технологии: мобильные и интегрированные!Вы не собираетесь делать WCF на своем телефоне.Посмотрите на JSON, ATOM, RSS и т. Д.

http://ayende.com/Blog/archive/2011/02/23/flatten-your-architecture-simplicity-as-a-core-value.aspx

0 голосов
/ 25 февраля 2011

Я использую стандартную универсальную модель для результатов JSON, например

 public class JSONOutputModel<T>{

       public int RequestId{ get; set; }

       public string Type { get{ return typeof(T).FullName; } }

       public T Model{ get; set; }

 }

Тогда у меня есть стандартные универсальные методы отправки / получения JSON в JavaScript.

...