Следует отметить, что «Код позади» является функцией механизма просмотра веб-форм. Это действительно не имеет ничего общего с ASP.NET MVC.
Например, механизм просмотра Razor в MVC3 даже не поддерживает его.
Я бы ответил на ваш вопрос следующим образом: если вы не можете переключать движки представлений без переписывания ваших контроллеров (или даже ваших моделей), значит, вы неправильно используете шаблон MVC.
Вероятно, большая часть того, что вы делаете в файле .aspx.cs, действительно должна быть выполнена до того, как модель (или модель представления) будет передана в представление. Тем не менее, в проектах, которые я перенес из ASP.NET Web Forms в ASP.NET MVC, я оставил много кода позади. Например, я считаю более понятным и приятным использование элемента управления Repeater, чем пытаться использовать цикл for в веб-формах. Я все еще просто перебираю данные модели представления. Так почему не? Разделение интересов сохраняется (возможно, в большей степени на самом деле).
Я имею в виду, почему «наилучшая практика» для веб-форм внезапно становится неправильным способом представления веб-форм? В качестве простого примера рассмотрим Repeater, который назначает разные классы CSS для каждой второй строки таблицы. Почему мой контроллер (или даже моя модель) должен заботиться? Попытка встроить такую логику в веб-формы быстро превращается в суп-тег и завершает спагетти. А теперь представьте что-нибудь более сложное.
Я оставил мастер-страницы на месте, которые строят меню в коде позади. Опять же, все данные поступают из модели представления. Я не понимаю, почему использование GridView или других элементов управления таким способом должно быть проблемой.
В любом случае я обычно отключал ViewState в веб-формах и связывал данные в «Init». Тем не менее, часто было небольшое ViewState, от которого я не мог избавиться. Я поместил некоторый код в «Render», который перемещает это после формы (по умолчанию до). При переходе на MVC я иногда оставлял этот код. Итак, у меня есть сайты ASP.MVC, которые действительно используют Code Behind. Я просто осторожен, что это код, который специфичен для представления.
В новых проектах я, как правило, обнаруживал меньшую потребность в Code Behind на большинстве страниц. К счастью, механизмы просмотра, такие как Razor, сделали смешивание кода и разметки в строке намного менее болезненным для написания, чтения и обслуживания.