1

我开发了一个 ASP.NET 聊天应用程序。现在我想与我的 Tridion 页面进行一些集成。为此,我需要一些已发布页面的代码隐藏文件。还有一个问题假设我想在我的页面中添加一个带有点击事件的按钮。我怎样才能做到这一点?我做了什么:

<%@ Page language="c#" Inherits="SDLchat.ChatWin" CodeFile="ChatWin.aspx.cs" %>
<%@ Register src="ChatLogin.ascx" TagName="c2" TagPrefix="uc2" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<HTML>
<HEAD>
    <title>ChatWin</title>
</HEAD>
<body>
    <form id="Form1" method="post" runat="server">
        <asp:Panel ID="Panel1" runat="server">
            <uc2:c2 ID="log2" runat="server" />
        </asp:Panel>

        <asp:Panel ID="Panel2" runat="server" Visible="False">
            <asp:LinkButton ID="LinkButton1" runat="server"
                 onclick="LinkButton1_Click">Change Room</asp:LinkButton>
        </asp:Panel>
    </form>
</body>
</HTML>

这是我的 .net 应用程序文件

这是我想在 Tridion 中迁移的 ASP.NET Web 应用程序。请帮忙

4

3 回答 3

6

因此,此应用程序中的每个页面都有两个文件:

  1. 包含标记的 ASPX 文件
  2. 包含代码的 CS 文件

由于 Tridion 发布基于每页一个文件,因此您可以通过为它们创建两个单独的页面来从 Tridion 发布这两个文件。或者,您可以选择仅从 Tridion 发布 ASPX,并在将 Web 应用程序部署到 IIS 时部署 CS 文件。

我建议将 ASPX 内容放入 Tridion 中的 DWT 模板构建块中,然后将其用作复合页面模板中的唯一构建块。

如果您决定同时从 Tridion 发布代码隐藏 CS 文件,请为其创建单独的 DWT,将代码粘贴到其中并为其创建单独的复合页面模板。


关于 PageLoad 事件的第二个问题:在这种情况下,Tridion 只会发布您放入其中的文件。它与您放入这些文件中的 ASP.NET 代码无关。如果 ASP.NET 页面加载事件在 Tridion 之外起作用,那么当您从 Tridion 发布相同的文件时它就会起作用。

于 2012-05-15T15:07:40.127 回答
3

Frank 给出了准确的答案,但我认为将任何代码从 CMS 发布到 Web 应用程序是一种非常糟糕的做法。使用这种方法无法测试整个应用程序,因为 CMS 用户可以增量更新应用程序。

我强烈建议您将所有代码隐藏到 Web 应用程序中,并通过 Visual Studio 等工具提供的典型 Web 应用程序部署过程来部署这些代码,并且只发布对 Web 应用程序中已有代码的引用的 ASPX 文件.

于 2012-05-15T15:42:00.247 回答
3

我同意 Chris 的观点,仅仅因为可以从 SDL Tridion CMS 发布任何内容(包括 dll、.config 文件、未编译的代码等)并不意味着您应该这样做。

应用程序逻辑(或代码)的生命周期与内容生命周期非常不同。通常,代码更改需要在整个开发、测试、验收环境中仔细部署、测试、修复和重新部署,然后由技术用户在一个操作中部署到生产环境中。根据您的组织,您可能有每月或更短/更长的开发和部署周期。

另一方面,您的现实生活内容通常仅存在于生产环境中,并且由非技术用户根据需要(可能每小时甚至更频繁)更新。

如果您将内容管理与应用程序部署混为一谈,您很快就会陷入混乱。想象一下有人不小心取消了 App_Code 结构组的发布?如果编辑重新发布了整个结构组,但没有意识到您已经对后面的代码进行了一些更改,该怎么办?你将如何确保 bin 结构组中的 dll与 web.config 以及其中注册的 ascx 控件在其他地方完全相同的时间发布?最好的情况是您的应用程序可能无法运行,最坏的情况是您会在整个站点中遇到编译错误。

我在各种 ASP.NET/SDL Tridion 网站上看到和使用的一些指南如下:

  • 使用标准基本页面(或有限的基本页面集,可能由页面模板确定)作为所有已发布 aspx 页面的公共代码 - 将通用逻辑放在此处
  • 对于任何特定功能,将其封装在控件(ascx 或 Web 控件)中,并将逻辑放入此代码中
  • 在 bin 目录中的已编译 dll 中包含用于基本页面的 .cs、用于控件和其他逻辑的代码 - App_Code 非常适合开发,但可能会为所有这些不同的文件管理带来部署难题
于 2012-05-15T21:14:30.500 回答