【问题标题】:How do I embed an ASP.NET Web Site (or Web Application) into another?如何将 ASP.NET 网站(或 Web 应用程序)嵌入到另一个网站中?
【发布时间】:2010-11-11 10:25:56
【问题描述】:

我在 ASP.NET 方面的经验很少,在开始编写我的第一个网站/应用程序之前我正在做一些自我培训,这将是一个校准实用程序。该实用程序如何工作现在不是我关心的问题。但是,该实用程序最终需要嵌入到其他人的网站中,或者只是作为带有我的代码的页面的 URL,或者嵌入(例如,作为 HTML 框架或 iframe)。为了弄清楚这方面的基础,我编写了两个非常简单的 ASP.NET 网站,一个包含框架集的“父”网站,以及一个我试图放入其中一个框架的“子”。

父级的“Default.aspx”HTML代码基本上是这样的:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Parent Site Test 1</title>
</head>

<frameset cols="300,*">
    <frame name="outer" src="parent.aspx" noresize></frame>
    <frame name="inner" src="[what do I put here?]"</frame>
</frameset>

</html>

“parent.aspx”页面中只有最基本的 HTML:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        I am the parent web form.
    </div>
    </form>
</body>
</html>

出于本练习的目的,子网站(就像我现在拥有的那样)位于单独的 VS2008 解决方案中,因为我试图重现其他人的网站必须引用我的校准网页/地点/事物。我最初在想有办法将整个子框架打包成一个 DLL,然后有办法告诉父级使用该 DLL 作为子框架的源。这来自我在 Java 领域的经验 - 使用 JBoss 和 J2EE,这将很容易解决,因为子将被部署为另一个 EAR 文件。

由于对 VS2008 和 ASP.NET 完全没有经验,过去几天我在 Google 上花了好几个小时试图找到答案,但无济于事。

  • 我试图做的事情是否合理;这是思考解决问题的正确方法吗?

  • 我能否通过某种方式将孩子打包到一个 DLL 中,将其部署为一个相当独立且自包含的网站(或 Web 应用程序......我仍然不清楚差异)?如果是,那么我如何在 VS2008 中从我的网站/应用程序实际创建此 DLL,然后如何在父网站中引用它?

  • 如果我在这里完全偏离轨道,我该如何以其他方式创建此父/子组合?孩子(真的,我最终会编写的校准实用程序)确实需要在 ASP.NET(使用 C#)中,但我无法控制父站点,因为它是其他人的代码,他们只想成为能够放入我的实用程序。

感谢您的帮助!你可以越具体越好。我对 ASP.NET 和 Visual Studio 非常陌生,尽管我确实有丰富的其他语言和 IDE 编程经验。

【问题讨论】:

    标签: asp.net visual-studio-2008 html-frames


    【解决方案1】:

    如果您知道客户端也使用 ASP.Net,您可以将其构建为用户控件。

    【讨论】:

      【解决方案2】:

      如果您有 IIS6 或更高版本,您可以运行这两个 Web 应用程序,并在您的 src="[what goes here]" 中输入子网站的本地 URL(可能是 http://localhost/ChildTestWebsite/child.aspx)。然后,当您加载 http://localhost/ParentTestWebsite/Default.aspx 时,您应该会看到框架。

      要将其打包成单个 DLL,我相信您必须像 Joel 所说的那样将其设为用户控件,否则您将拥有 DLL + aspx 页面。

      【讨论】:

      • 当我有 DLL + aspx 文件时,DLL 中有什么?这都是代码隐藏的东西吗?例如。如果我有 Default.aspx,那么 Default.aspx.cs 会在 DLL 中结束吗?
      • 是的。您将拥有 DLL 文件 + aspx 文件 + ascx 文件以及配置等。所有背后的代码都将在 DLL 中。
      【解决方案3】:

      你应该做什么取决于父母和孩子之间的互动如何。

      如果父级不打算访问子级的任何服务器端功能,您可以只引用框架标签上 src 中的绝对 http 路径。如果您尝试访问 javascript 方法并且这 2 个应用程序位于不同的 Web 服务器上,您可能会在某些浏览器中遇到安全问题,但这不是 .NET 特定的。

      如果父级要访问服务器端功能,您需要在父级项目的某处提供服务器端组件。这更复杂。我认为您必须将所有子页面构建为包含在父 aspx 页面中的 Web 控件。

      1:将子项目构建为可供父级使用的服务器控件的 Web 控件库。这是关于部署的最佳方法。一切都内置在一个 dll 中。最大的缺点是服务器控件只能用代码开发。您没有视觉设计师可以帮助您。

      2:创建一个 Web 应用程序项目。在 VS2008 中,您可以通过“新建项目”执行此操作,然后找到“ASP.NET Web 应用程序”模板。这意味着一个 Web 项目,其中所有代码(cs 文件中的所有内容)都构建到单个 dll 中。在这种情况下,您将创建可供父页面使用的用户控件(ascx 文件)。这样做的缺点是用户控件必须放在 runnin web 应用程序上,因此您必须将所有 ascx 文件复制到父网站的部署位置。还必须将 dll 复制到父网站的 bin 文件夹中。在这里,您的优势是在 VisualStudio 中设计 GUI 要简单得多。为 ascx 用户控件设计 gui 和代码与创建完整的 aspx 网页非常相似。

      【讨论】:

        猜你喜欢
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        • 2010-09-10
        • 2021-09-27
        • 1970-01-01
        相关资源
        最近更新 更多