Intereting Posts

MVC Rendering (RenderPartial, RenderAction) Html из другого приложения MVC

Я работаю в среде со многими командами, которые отвечают за конкретный контент на страницах. Каждая команда делится определенной информацией (общие библиотеки classов и мастер-страницы), каждая из которых собирается предоставлять разные типы контента.

Возможно ли, чтобы приложение MVC выполняло нечто подобное RenderPartial и передало модель другому MVC-приложению Controller / Action для возврата содержимого?

Таким образом, код для этого может выглядеть так: ( http://www.mydomain.com/Home/Index )

 

Может быть, это не очень хорошая идея, так как другой stream должен вращаться на частичном представлении?

В принципе да, хотя ваш вопрос немного расплывчатый.

Посмотрите на «переносные области» в MvcContrib на codeplex. Этот метод позволяет отдельным командам разрабатывать отдельные приложения MVC, которые затем будут организованы центральным приложением.

Нет, RenderPartial / RenerAction может загружать только те виды, к которым он может получить доступ через reflection, а не через HTTP-запросы к внешним ресурсам.

Если приложение MVC для «ads.mydomain.com» доступно для вас при их компиляции, вы можете использовать его ресурсы через Areas, однако оно не будет записывать изменения, если они выпустят новую версию в «ads.mydomain.com» ‘, без того, чтобы вы получили свою последнюю сборку и перекомпилировали и развернули приложение.

Вы можете делать подобные вещи с помощью AJAX, где вы можете загрузить fragment с другого сайта, однако он не будет выполняться на стороне сервера и потребует, чтобы клиент включал javascript. Также модель должна быть преобразована в JSON и отправлена ​​на запрос, поэтому это немного хакерское решение.

Вы можете написать метод расширения (назовем его Html.RenderRemote), который выполняет всю работу по созданию HTTP-соединения с целью и запрашивает URL-адрес. Вам придется сериализовать модель и отправить ее как часть запроса.

 public static string RenderRemote(this HtmlHelper, string url, object model) { // send request to 'url' with serialized model as data // get response stream and convert to string // return it } 

Вы можете использовать его как:

 <%= Html.RenderRemote('http://ads.mydomain.com', Model'); 

Вы не сможете использовать маршруты в удаленном домене, поэтому вам придется самостоятельно создавать литеральный URL, а это значит, что если они изменят ваши правила маршрутизации, ваш URL-адрес больше не будет работать.