代码之家  ›  专栏  ›  技术社区  ›  Erik Philips Gabriel Costa

来自另一个MVC应用程序的MVC呈现(renderpartial,renderaction)HTML

  •  3
  • Erik Philips Gabriel Costa  · 技术社区  · 16 年前

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

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

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

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

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

    2 回复  |  直到 11 年前
        1
  •  4
  •   Clicktricity    16 年前

    原则上是的,尽管你的问题有点含糊。

    看看CodePlex上mvcontrib中的“可移植区域”。这种技术允许不同的团队开发单独的MVC应用程序,然后由一个中央应用程序协调。

        2
  •  5
  •   Michael Shimmins    16 年前

    不,renderpartial/reneraction只能通过反射(而不是通过对外部资源的HTTP请求)加载可以访问的视图。

    如果“ads.mydomain.com”的MVC应用程序可供您在编译时使用,那么您可以通过区域利用其资源,但是,如果他们在没有获得最新程序集的情况下向“ads.mydomain.com”网站发布新版本,并且重新编译和部署您的应用程序,则不会收集更改。

    您可以使用Ajax做类似的工作,在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将不再工作。