c# - MVC 从另一个 MVC 应用程序渲染 (RenderPartial, RenderAction) Html

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

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

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

因此,此代码可能如下所示: ( http://www.mydomain.com/Home/Index )

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

也许这不是一个好主意,因为另一个线程必须启动以向服务器提供部分 View ?

最佳答案

不,RenderPartial/RenerAction 只能加载它可以通过反射访问的 View ,而不是通过对外部资源的 HTTP 请求。

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

你可以用 AJAX 做类似的事情,你可以从另一个站点加载一个片段,但是它不会在服务器端完成,并且需要客户端启用 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 将不再有效。

关于c# - MVC 从另一个 MVC 应用程序渲染 (RenderPartial, RenderAction) Html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3680695/

相关文章:

c# - 后处理程序上的部分页面模型未执行 | ASP.NET Core Razor 页面 2.0

knockout.js - 将 ko 绑定(bind)应用于局部 View

asp.net-mvc - ASP.NET MVC3 自定义不显眼的客户端验证不会阻止 Ajax 表单发布

asp.net-mvc - ASP.NET MVC & Windsor.CaSTLe : working with HttpContext-dependent services

c# - 不支持每种类型的多个对象集。对象集 IdentityUsers' 和 Users 都可以包含类型的实例

c# - 构建 Rest API 请求/响应模型的最佳实践

jquery - 在 JSON 响应中返回 'PartialView' 的问题

c# - 在没有 CMD.EXE 的情况下运行批处理命令

c# - Internet Explorer 不对 url 参数进行编码

C# 如何创建代码以使用按钮单击事件将表单设置回默认属性?