Мне нужно создать несколько частичных представлений ascx в моих MVC-приложениях для инкапсуляции многократно используемых функций, а также архивирования SOR и SOC.Однако я столкнулся с проблемой, как инкапсулировать бизнес-логику, которая управляет представлениями MVC ascx.
В веб-формах код элемента управления ASCX может обрабатывать событие нажатия кнопки, и браузер по-прежнему показывает ту же страницу только с одной обратной передачей.Как я могу архивировать то же самое в MVC?Когда ~ / Address / Edit / 2 включает частичное представление ascx с кнопкой на нем, которая вызывает другое действие MVC - скажем, ~ / ShareController / CommonAction - каков наилучший способ для CommonAction вернуться к тому же представлению, которое включает в себяфайл ascx?
Возможно, я упускаю общий шаблон в веб-разработке MVC?
Спасибо,
Макс
Обновление: вот более подробное описаниешаблон, который я ищу:
Частичное представление должно быть редактором адресов.Он может проверять адрес, отображать ошибки проверки и сохранять информацию обратно в базу данных.
Редактор адресов будет сидеть на многих страницах с различными контроллерами / действиями.
В классической веб-форме элемент управления ascx может прекрасно взаимодействовать с пользователем самостоятельно через множество обратных передач без изменения URL-адреса, нарушающего общий процесс страницы.Каков правильный шаблон для подобного сценария в MVC?
Обновление 2:
Не уверен, что это имеет какое-либо отношение к полноте состояния веб-формы.Совершенно другая особенность.Речь идет о вызове контроллера другим субконтроллером (или дочерним контроллером) для обработки частичного представления.См. Мой пример в конце этого комментария.
Я просто хочу достичь того же уровня инкапсуляции и разделения интересов.Если у MVC-фреймворка этого нет, это серьезный недостаток.
В MVC, как мы можем иметь «вещь» (или частичное представление из-за отсутствия лучшей альтернативы), которая способна обрабатывать презентацию, а также логику и находиться на другой родительской странице без какого-либо вмешательства?
Насколько я понимаю, частичные представления в MVC - это просто презентация, которая не может иметь выделенный контроллер без вмешательства в основной контроллер.Надеюсь, я ошибся
Чтобы привести еще один пример, рассмотрим эту страницу, которую вы читаете «stackoverflow.com/questions/ enjid}».Включает компонент «Добавить комментарий».Добавление комментария может выполнять проверку на стороне сервера для предотвращения неправильных комментариев.Как вы могли бы создать сквозной компонент «Добавить комментарий», который может находиться на любой странице и обрабатывать необходимую логику контроллера?Единственный способ, о котором я могу подумать, - это изменить контроллер страницы хоста, чтобы он мог выдавать сообщения проверки пользователя и просить их исправить ошибки с помощью обратной отправки.Это означает, что вы добавляете компонент на 10 разных страниц, вам нужно изменить 10 разных контроллеров.Это убивает «СУХОГО»
Я НАДЕЖДА, ЧТО Я НЕПРАВИЛЬНОпотому что я люблю MVC sofar.
Вывод:
Я отметил ответ Кенни как ответ;однако я бы посчитал это серьезным недостатком инфраструктуры MVC с точки зрения инкапсуляции, повторного использования и принципа DRY.
Мое мнение не имеет никакого отношения к полноте состояния веб-форм.
Пожалуйста, позвольте мне объяснить:
В веб-формах вы можете на 100% инкапсулировать сложные функции в элементе управления ascx.и, конечно же, связанные библиотеки классов.Один (1) разработчик может потратить недели на его разработку.Как только его работа закончена, никому не нужно ничего знать об этом и просто использовать это.Пользовательский элемент управления можно многократно использовать на многих страницах, не беспокоя других «разработчиков» подробными действиями, выполняемыми в компоненте ascx.
В отличие от этого, вы никогда не сможетедобиться того же с ASP.NET MVC, где частичке ascx необходимо взаимодействовать с пользователем.Как только ascx должен взаимодействовать, ему нужен собственный контроллер, и контроллер должен сохранить ModelState.
Джереми Скиннер представил [ModelStateToTempData] в MVCContrib: http://www.jeremyskinner.co.uk/2008/10/18/storing-modelstate-in-tempdata-with-aspnet-mvc/ Однако это всего лишь патч.
Хороший фреймворк должен позволить разработчику на 100% инкапсулировать свою работу - вконтроль, частичный, ascx или что-то еще - и он был у остальной команды, чтобы они могли «просто использовать его», не зная никаких данных.Winform отлично справляется с этим во многих сложных сценариях.
Любой, хотя добро пожаловать.