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

Eri*_*ips 3 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) %>
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ins 5

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

如果您在编辑它们时可以使用"ads.mydomain.com"的MVC应用程序,那么您可以通过区域使用其资源,但如果它们向"ads.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
}
Run Code Online (Sandbox Code Playgroud)

你可以用它作为:

<%= Html.RenderRemote('http://ads.mydomain.com', Model');
Run Code Online (Sandbox Code Playgroud)

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