Богатое веб-приложение с использованием ASP.NET MVC и Backbone.js и прогрессивное улучшение - PullRequest
1 голос
/ 21 февраля 2012

Я работаю над небольшим веб-приложением, использующим mvc и backbone.js, и у меня есть пара мыслей о том, как обрабатывать асинхронный запрос против обычных запросов.

Сегодня я использую контроллер / pages, которыйвозвращает частичное представление, если это ajax-запрос, и стандартное представление, если это обычный запрос.В еще один вопрос Мне сказали, что я все делаю неправильно, когда я отправляю кучу HTML обратно клиенту.

Так, как я должен структурировать свои контроллеры и т. Д. Для обработки как асинхронных, так ине асинхронные запросы?

В моем случае у меня в контроллере страниц есть следующий код

public ActionResult Index() {
    var id = _model.Id;
    var parentId = _model.Parent != null ? _model.Parent.Id : null;
    var viewModel = new IndexViewModel
    {
        RootModel = _session.Query<IPageModel>().SingleOrDefault(model => model.Parent == null),
        CurrentModel = _model,
        ParentModel = parentId != null ? _session.Load<IPageModel>(parentId) : null,
        Children = _session.Query<IPageModel>()
            .Where(model => model.Parent.Id == id)
            .Where(model => !model.Metadata.IsDeleted)
            .OrderBy(model => model.Metadata.SortOrder)
            .ToList()
    };

    if(Request.IsAjaxRequest()) {
        return PartialView(viewModel);    
    }
    return View(viewModel);
}

Но если я все правильно понимаю, мне будет лучше отослать коллекцию страниц вместополный вид модели?Как мне справиться с этим в моем контроллере?

Это хорошая идея, чтобы создать отдельный контроллер / API, используя, например.контроллер api в mvc 4?

Ответы [ 4 ]

4 голосов
/ 21 февраля 2012

Если вы используете Backbone, вы должны вернуть JSON вместо PartialView, а PartialView должен быть шаблоном на странице, где представление Backbone будет отображать это.

1 голос
/ 22 февраля 2012

Как упоминалось ранее в разных ответах, вы должны возвращать результат JSON вместо представления HTML. Результат JSON на MSDN Пример использования результата JSON

Если вы используете ASP.NET MVC 4 (на данный момент бета) вы можете использовать web api для получения данных в JSON через вызов ajax / rest.

0 голосов
/ 23 февраля 2012

Я собрал несколько примеров Backbone вместе в работающее приложение ASP.net MVC 3, которое использует интерфейс REST. Вот ссылка на мой блог Tumblr , где я предоставил информацию для исходного кода и веб-сайтов, которые я использовал в качестве ресурсов. Backbone.js действительно хорошо работает с MVC 3, и я всегда ищу новые способы продвижения этого примера.

0 голосов
/ 22 февраля 2012

Я согласен с Флоримом. Вы должны возвращать JSON из ваших контроллеров MVC. Магистраль была построена с учетом REST. Поэтому ваш сервер должен имитировать REST API и возвращать json для Backbone для работы. Когда я работаю с MVC 3 и Backbone, весь код моего сервера возвращает данные. Обычно это одно представление, и это представление Backbone Application. «Представления» веб-приложения отображаются с использованием шаблонов из данных, возвращаемых из моих контроллеров. Надеюсь это поможет.

Я еще не играл с MVC 4 Web API, но я думаю, что эта ситуация была бы идеальным выбором для него.

...