来自另一个MVC应用程序的MVC渲染(RenderPartial,RenderAction)Html

时间:2010-09-09 21:25:27

标签: c# asp.net-mvc partial-views

我在一个有许多团队的环境中工作,他们负责页面上的特定内容。每个团队都在共享特定信息(公共类库和母版页),每个信息都会提供不同类型的内容。

MVC应用程序是否可以执行类似于RenderPartial的操作并将模型传递给另一个MVC应用程序Controller / Action以返回内容?

所以代码可能如下所示: (http://www.mydomain.com/Home/Index

<% Html.RenderAction("ads.mydomain.com", "Home", "Index", AdModel) %>

也许这不是一个好主意,因为另一个线程必须转向服务器部分视图?

2 个答案:

答案 0 :(得分:5)

不,RenderPartial / RenerAction只能加载可以通过反射访问的视图,而不能通过HTTP请求加载到外部资源。

如果您在编辑它们时可以使用“ads.mydomain.com”的MVC应用程序,那么您可以通过区域使用其资源,但如果它们向“广告”发布新版本,它将无法获取更改。 mydomain.com的网站,无需您获得最新的程序集,并重新编译和部署您的应用程序。

您可以使用AJAX执行类似的操作,您可以从另一个站点加载片段,但是它不会在服务器端完成,并且需要客户端启用javascript。此外,模型需要转换为JSON并发布到请求中,因此它有点像hacky解决方案。

您可以编写一个扩展方法(让我们称之为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');

您将无法利用远程域上的路由,因此您必须自己构建文字网址,这意味着如果他们更改了您的路由规则,您的网址将不再有效。

答案 1 :(得分:4)

原则上是的,虽然你的问题有点模糊。

在codeplex上查看MvcContrib中的“可移植区域”。这种技术允许单独的团队开发单独的MVC应用程序,然后由中央应用程序进行编排。