Действительно, ваш вопрос - в чем разница между Razor Page и традиционным MVC. Оба используют Razor. Страница Razor является автономной (своего рода). Он имеет программный код, похожий на веб-форму, поэтому технически у вас будет файл cshtml
и cshtml.cs
, последний из которых будет действовать как для вашего контроллера, так и для вашей модели. Принимая во внимание, что с традиционным MVC у вас есть отдельные FooController
, FooViewModel
и Foo.cshtml
. Помимо некоторых незначительных функциональных отличий (таких как необходимость использовать «действия», основанные на соглашениях, такие как OnGetAsync
, OnPostAsync
и т. Д. Со страницами Razor), это в значительной степени так.
Главным преимуществом Razor Pages, на мой взгляд, является его замкнутость. Весь код, касающийся определенной части функциональности, по сути, находится в одном месте. Однако недостатком этого является то, что он может затруднить повторное использование кода или, по крайней мере, не так интуитивно понятен в некоторых местах. Лично я думаю, что четкое разделение обязанностей, предлагаемое MVC, является более идеальным подходом и также менее «волшебным». Одна из маркетинговых точек соприкосновения с Razor Pages - это глупо легко. Это может быть правдой, но благодаря своей «простоте» она абстрагируется от вещей, о которых веб-разработчики должны знать, и это может быть опасно. Если вы на самом деле не понимаете, как что-то работает, вы не узнаете, правильно ли вы все делаете.
Я предвзят, но если честно ответить «Когда следует использовать Razor Pages?», Я бы сказал, никогда. Мне не нравится смешивание обязанностей, все «волшебство» и т. Д. С момента их появления количество вопросов по ASP.NET Core здесь взлетело до небес, и большинство вопросов о Razor Pages касаются вещей, которые либо очевидны, либо находятся на наименее интуитивно понятнее с MVC. Тем не менее, если вы собираетесь использовать их, они лучше всего подходят для вещей типа CRUD - вещей, которые не обладают большой функциональностью и довольно просты и / или повторяются.
Наконец, да, вы можете свободно смешивать и сочетать Razor Pages и MVC. Однако, это следует отметить, потому что это не очевидно для всех: Razor Pages работают только как Razor Pages, когда используются как Razor Pages. Другими словами, если вы создаете представление с выделенным кодом (страница Razor), а затем используете это представление в качестве возврата от действия MVC, частичного и т. Д., Выделенный код фактически не используется, просто «просмотр» часть. На самом деле, чтобы быть более точным, он «используется», но только для того, чтобы предоставить модель для представления в общем смысле, поскольку представление использует Page
в коде в качестве своей модели. Однако на самом деле это не будет «активным», в том смысле, что действия страницы не будут выполнены, вещи, скорее всего, не будут правильно инициализированы и т. Д.