Как построить проект с формами, которые будут использоваться во многих других проектах MVC - PullRequest
0 голосов
/ 10 октября 2018

Моя цель - создать проект InputMVC, который могут использовать несколько других проектов MVC для предотвращения дублирования кода, и поэтому, если я обновлю форму в проекте InputMVC, остальные также будут обновлены, поскольку они будут ссылаться на ту же страницу InputMVC.Быстрый рисунок, который я сделал, чтобы помочь передать мои желания и потребности, которые я сделал.

enter image description here

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

Каков наилучший путь для достижения этой цели?возможно ли использование Reactjs?Можно ли повторно использовать мои контроллеры?

РЕДАКТИРОВАТЬ Я должен был уточнить это ранее.Проект Input может быть таким, каким он должен быть.Это не обязательно должен быть проект MVC.Вот мои необходимые материалы для этого проекта, и, возможно, это вызовет идею наилучшего пути.

Требования 1) Форма должна использовать ReactJS 2) Форма должна быть отдельной сущностью, чтобы избежать дублирования кода 3)Форма будет использоваться как «частичная» внутри другого проекта MVC. 4) Форма будет каким-либо образом взаимодействовать с БД, но я не беспокоюсь об этой части

Спасибо!

1 Ответ

0 голосов
/ 10 октября 2018

MVC определяется «соглашением о конфигурации».Другими словами, он ожидает, что контроллеры будут в папке с именем Controllers, он ожидает, что представления будут в Views / ControllerName или Views / Shared и т. Д., Так что это легче сказать, чем сделать.

Если вы фанатичныоб этом я хотел бы создать второй проект MVC, а в родительском проекте добавить ссылку на недавно созданный дочерний проект.

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

public IActionResult ParentAction()
{
    var childController = new ChildApp.Controllers.ChildController(); // You may need to pass in any dependencies yourself

    return childController.ChildAction();
}

Это устраняет большую часть головной боли при переписывании контроллеров и позволяет автоматически отражать изменения в дочернем проекте.Теперь, если вы перейдете к localhost: 1234 / Parent / ParentAction, вы увидите следующую ошибку:

InvalidOperationException: The view 'ParentAction' was not found. The following locations were searched:
/Views/Parent/ParentAction.cshtml
/Views/Shared/ParentAction.cshtml
/Pages/Shared/ParentAction.cshtml

Это потому, что ваше представление находится в дочернем проекте, а не в родительском проекте, и, следовательно, ненайден родительским контроллером. Эта статья и ссылка на ссылку должны дать вам представление о том, как настроить родительский проект для обращения к представлениям в каталоге дочернего проекта, чтобы избавиться от этой ошибки.Далее, я подозреваю, что вы обнаружите, что все ссылки, относящиеся к корню, такие как ~/js/myscript.js, не работают, потому что они находятся в wwwroot дочернего проекта, а не в родительском проекте.Возможно, вы могли бы установить символическую ссылку в вашей файловой структуре или что-то для ссылки на дочерний проект из родительского проекта, но я этого не проверял.

Я думаю, что лучшим решением было бы опубликовать оба проектаотдельно, и родительский проект загружает контент из дочернего проекта по мере необходимости.Вы можете исследовать обратные прокси, чтобы увидеть пример того, как это будет работать.Вы можете ссылаться на скрипты и изображения по мере необходимости, используя полный URL.Вы можете формировать содержимое по мере необходимости, если установлены правильные заголовки запроса (см. X-Frame-Options).Дочерние контроллеры также могут предоставлять данные родителю, действуя как API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...