ASP.NET webforms + ASP.NET Ajax в сравнении с ASP.NET MVC и свободой Ajax

Если задан выбор, какой путь вы бы взяли?

ASP.NET Webforms + ASP.NET AJAX

или

ASP.NET MVC + JavaScript Framework вашего выбора

Существуют ли какие-либо ограничения, которые ASP.NET Webforms/ASP.NET AJAX имеет в отношении MVC?

Ответ 1

Я сделал это в последнее время, я бы взял MVC девять раз из десяти.

  • Мне очень не нравится реализация элементов управления ajax asp.net, у меня возникло множество проблем с синхронизацией, событиями и отладкой проблем обратной передачи. Я многое узнал из http://encosia.com/2007/07/11/why-aspnet-ajax-updatepanels-are-dangerous/
  • В проекте asp.net мы использовали шаблон MVP http://www.codeplex.com/aspnetmvp, и образец работал отлично. Однако у нас получилось много кода в представлении, потому что мы напрямую взаимодействовали с элементами управления на стороне сервера (т.е. Много манипуляций с gridview). Этот код почти не тестируется с помощью фреймворков unit test. Мы должны были проявлять большую осторожность в отношении того, чтобы код не отображался, но в некоторых случаях это было просто проще и менее беспорядочно.

Единственное, что я выбрал бы с помощью разработки форм asp.net, было бы использовать элемент управления gridview. Мы используем jquery для нашей инфраструктуры javascript с MVC и еще не нашли очень хороший gridview, такой как управление. У нас есть что-то функциональное, но количество времени, которое мы погрузили в обучение, настройку и отладку, с использованием элементов управления на стороне сервера asp.net было существенным. Один теряет все красивые виджеты. Microsoft предоставляет из коробки возможность создания формы без asp.net. Потеря этих виджетов освобождается и пугает в то же время, когда вы впервые начинаете.

В конце дня я счастлив, что мы занимаемся разработкой MVC. Моя команда и я изучили новую структуру (раньше мы были разработчиками только asp.net), и наши руки были грязными с html и javascript. Это навыки, которые мы можем использовать для других проектов или других языков, если нам когда-либо понадобится.

Ответ 2

Мне нравятся веб-формы, но ASP.NET AJAX - это куча дерьма.

Я предпочитаю использовать WebForms + пользовательские HTTPHandlers, обрабатывающие серверную часть любых вызовов AJAX.

Heh, downvoted...

ASP.NET AJAX - это куча дерьма, потому что обратный вызов требует, чтобы весь класс страницы был восстановлен, вы не вызываете ни одного метода, вы каждый раз перестраиваете всю страницу на сервере.

Кроме того, UpdatePanels возвращают всю страницу, появляется только раздел на панели обновления, общая потеря полосы пропускания.

Я понимаю, почему это делается так, потому что элементы управления WebForms не могут быть легко другими способами, но они все равно действительно паршивы.

Ответ 3

Не позволяйте людям обманывать вас, думая, что это четкий выбор. Вы можете получить лучшее из обоих миров. Мой подход заключается в создании проекта MVC, но вместо добавления представлений добавьте стандартные страницы asp.net, но измените код позади, чтобы наследовать из MVC.ViewPage следующим образом:

public partial class SamplePage : System.Web.Mvc.ViewPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

Если вы ограничиваетесь тегом одной формы (с runat = "server" ) в коде впереди, тогда у вас есть полный код за доступом к вашим стандартным элементам управления asp.net server. Это означает, что вы получаете полный контроль над презентацией на стороне сервера (например, с помощью привязки данных и повторителей) без необходимости выполнять этот старый стиль кода в стиле ASP.

    protected void Page_Load(object sender, EventArgs e)
    {
        IObjectDefinition instance = (IObjectDefinition)ViewData["definition"];
        _objectName.Text = instance.DisplayName;//textbox or label

        DataTable itemVals = new DataTable();
        itemVals .Columns.Add("itemName");
        itemVals .Columns.Add("itemValue");            


        IDictionary<string, string> items = (IDictionary<string, string>)ViewData["items"];
        foreach (KeyValuePair<string, string> datum in items)
        {
            conditions.Rows.Add(new object[] { datum.Key, datum.Value});
        }

        _itemList.DataSource = itemVals;//repeater
        _itemList.DataBind();
    }

Сообщение для любого элемента управления не отправляется обратно на страницу, а на контроллер. Если вы помните, что используете свойство name на своих элементах управления сервером, они попадают в коллекцию FormControls для доступа к вашим переменным страницы в соответствии со стандартным MVC.

Итак, что вы получаете?:

  • Полный контроль над версией на стороне сервера для вашего кода впереди - это просто HTML и теги управления сервером asp.net
  • полное разделение проблем - страница делает только презентацию, и все оркестровки и marshalling выполняется в контроллере (а не в стиле asp.net на странице).
  • полная проверка MVC
  • Нет html-кодирования
  • Вы можете отключить режим просмотра и сбросить разброс страниц

Что вы теряете?

  • Еще раз вы ограничены одной формой на страницу, если хотите использовать только серверные элементы управления
  • Вам может потребоваться вручную указать целевые объекты обратной связи для кнопок и формы
  • У вас снова есть 2 файла для презентации

О, а для AJAX - однозначно. Выполнение запроса к методу контроллера, который возвращает JsonResult, действительно упрощает вещи.

Ответ 4

Я вижу, что большинство ответов вышло до MVC 1.0. Поскольку мы сейчас находимся в версии 2.0 Preview, я подумал, что может быть приятно вернуться.

Я был разработчиком ASP.NET около пяти лет, прежде чем я перешел на MVC в марте прошлого года. Я не пожалел об этом на секунду. Теперь я понимаю, что чем сильнее я попадал в ASP.NET WebForms, тем труднее стало изучать другие технологии, такие как JavaScript и не-Microsoft-реализация AJAX. Microsoft использует свой подход к разработке ASP.NET из своего подхода к разработке WinForms, который помог с кривой обучения, если вы пришли из разработки WebForms, но это не очень хороший способ разработки веб-приложений, если вы понимаете различия между этими двумя подходами.

Последний проект, над которым я работаю, требует от меня изучения ASP.NET MVC, JavaScript, jQuery, CSS 2 и AJAX (не Microsoft). Спустя всего девять месяцев я чувствую себя намного лучше подготовленными к проектам веб-разработки, чем после пяти лет разработки ASP.NET. Реализация ASP.NET делает работу намного сложнее в долгосрочной перспективе. MVC делает вещи намного проще, потому что вы меньше зависите от ярлыков. Требуется некоторое время, чтобы изучить структуру, но чем больше вы узнаете о структуре, тем меньше зависит от структуры, которой вы становитесь, и тем больше вы начинаете изучать и понимать установленные стандарты, такие как JavaScript и AJAX.

Для меня - это четкий выбор. Я никогда не вернусь к ASP.NET. Если я не могу использовать ASP.NET MVC, я изучу Ruby или PHP. Я хочу, чтобы прогресс и продвижение моих инструментов веб-разработки были мотивированы потребностями сообщества разработчиков, а не прибылью.

Ответ 5

ASP.NET MVC все еще находится в форме "Предварительный просмотр", и поэтому я не буду рассматривать его до тех пор, пока он не созреет. Вы можете легко создать собственный шаблон MVP без большой сантехники.

На фронте Ajax, я бы сказал, попробуйте найти библиотеки (коммерческие или другие), которые делают то, что вы ищете. Основы (сетки, деревья, текстовые поля автозаполнения и т.д.) Были доведены до смерти. Не переустанавливайте колесо.

Ответ 6

Когда я проектирую сайт, одна из больших вещей, которые я предпочитаю, - это принцип СУХОЙ. IMO ASP.NET MVC намного сух, чем веб-формы.

Недавно я сделал переход от webforms к MVC, и я надеюсь, что мне никогда не придется возвращаться!

Ответ 7

Если вам нужна панель обновления, я предлагаю вам использовать open source и lite MagicAjax или ComfortASP. Если вам нужна фреймворк, помогающий разработать пользовательский ajax, я предлагаю jQuery.

Ответ 8

Веб-формы с ASP.NET Ajax - это рай. Интеграция между двумя просто удивительна и кажется настолько естественной для работы.

Использование веб-форм вместо mvc даст вам возможность использовать жизненный цикл для разработки очень хороших и повторно используемых элементов управления.

Но мне все же нравится добавлять немного jQuery в микс для перемещения dom и добавления анимаций, мне просто нравится использовать asp.net ajax для интеграции с серверной стороной.

Ответ 9

Концепция MVC великолепна, но будьте готовы освободить практически все функциональные возможности всех серверных элементов управления, которые вы использовали в течение стольких лет. Я только посмотрел на реализацию MVC примерно на неделю, но состояние жизненного цикла страницы и представления исчезло, поэтому эти элементы управления больше не функционируют должным образом.

Я также был ошеломлен, чтобы найти ряд примеров, содержащих много логического кода в разметке. Правильно, "если" и "foreach" в файлах aspx - ужасный шаг назад imho. Я был очень счастлив оставить классический asp позади, но в текущей реализации шаблона mvc asp.net вы вернулись к коду в своей разметке, необходимости использовать помощники повсюду и отсутствие практически любых доступных серверных элементов управления.

Если вы начинаете новый проект, я бы рекомендовал придерживаться веб-форм asp.net и использовать по мере необходимости встроенный asp.net ajax, инструментарий и jQuery. Реализация asp.net ajax не может быть абсолютной лучшей или самой эффективной реализацией, но если вы не получите миллион уникальных данных в первый день, или ваш сервер является коммодором 20, успех не будет таким заметным.

Это, конечно, зависит от размера вашего проекта. Если вы начинаете приложение на уровне предприятия на 5 лет, которое ожидает миллионы просмотров страниц, UpdatePanel может не вырезать его, но если вы строите средний сайт, бросая прототип или просто нужно быстро двигаться, asp.net ajax отлично работает и имеет чрезвычайно низкую кривую обучения.

И чтобы быть понятным, вся страница абсолютно не возвращается каждый раз, когда выполняется ajax-вызов./Только/содержимое панели, которое необходимо обновить, отправляется по кабелю. Любой HTTP-монитор докажет это. Да, страница/lifecycle/выполняется, но зная, что вы можете создавать довольно эффективные asp.net-приложения ajax.

Ответ 10

Мой опыт связан с программированием веб-приложений для серверов Apache в php и ruby. Когда я получил работу, поддерживающую веб-приложение, написанное на asp.net(webforms), я начал изучать способ создания веб-приложений Microsoft. Я должен сказать, что я был полностью унижен! Я думал о том, что WTF - это все мусорное ведро, которое отправляется обратно вперед? Это даже необходимо?

И затем я решил посмотреть на некоторые простые вещи с помощью ajax и jquery, которые заставляют меня обновлять панели и идентификаторы clientID, а не то, что я установил в представлении. Что за трата моего времени! Почему я не могу иметь несколько форм на одной странице? Почему я не могу использовать регулярные вызовы ajax? Почему у моих представлений есть логика сервера? Это были все вопросы, которые гарантируют, что многие веб-программисты сталкиваются с веб-форматами asp.net. Затем я обнаружил .NET MVC. Моя жизнь стала намного легче.

Я был использован для использования фреймворков MVC, таких как Rails и CakePHP, для создания веб-приложений так, как они должны были быть запрограммированы. С технологиями, фактически предназначенными для Интернета.

Мое предложение было бы так: Оставьте WebForms для людей, которые используются для программирования приложений типа winforms, потому что он пытается абстрагировать тот факт, что вы программируете в Интернете. Если вы хотите иметь реальную свободу для разработки приложений для Интернета, которые на самом деле имеют смысл для веб-программистов, используйте .NET MVC или что-то подобное, что не помешает вам.

Вот мои два цента...

Ответ 11

чтобы комплимент @ben отвечал, я использовал веб-формы ASP.Net для простой привязки данных и JQuery для всех транзакций Ajax. Честно говоря, я все еще не мог отказаться от привязки данных из-за своей простоты. Viewstate почти бесполезен, поэтому я в основном отключил его. Вы можете использовать MVC, хотя, но будьте осторожны, потребуется большая часть вашего времени на разработку функциональных возможностей, которые вы считаете само собой разумеющимися в Forms. Удачи!

Ответ 12

Я использовал asp.net winforms с ajax.net, а также prototype/ext/jquery. Я предполагаю, что что-то для рассмотрения является целью сайта. MVC - популярный шаблон. Я не могу сказать ничего против ASP MVC, потому что у меня не было возможности использовать его, но я хочу убедиться, что вы знаете, что не ограничены просто ajax.net, если вы выбрали веб-формы.

Ответ 13

Я согласен с тем, что asp.net ajax UpdatePanels не являются идеальным решением.

Мы избегали их использования и вместо этого использовали библиотеки на стороне клиента для любой связи с сервером. Мне нравится то, что я видел в PDC о функциях, входящих в asp.net ajax 4.0 с декларативными компонентами и шаблонами на стороне клиента - очень приятно! Сочетание JQuery с существующими библиотеками дает совсем немного - и я поставил под вопрос использование JQuery исключительно, вместо того чтобы уделять ему гораздо меньшую площадь и способность выполнять многие те же вещи, что и клиентская библиотека asp.net ajax.

Что касается серверного стека - я еще не использовал MVC, но у нас был успех с использованием домашнего MVP-подхода с использованием веб-форм.

Ответ 14

Прошло много времени с оригинального вопроса. Теперь у нас есть MVC3 и .NET 4

Является ли MVC лучшим решением, чем раньше?