跳转到内容

Umbraco/示例与文章/Dot Net 控件/在 Umbraco 中使用 Dot NET 控件

来自 Wikibooks,开放的世界,开放的书籍

在 umbraco 中使用 .NET 控件

[编辑 | 编辑源代码]

最初来自http://www.umbraco.org/media/42a0202c-b0ba-4f84-bcf1-64dfd5230322-usingcontrolswithumbraco.pdf上的 PDF 文件

本教程是即将推出的 Umbraco 开发者休息室产品的预告片。如果您喜欢您阅读的内容,您一定会喜欢“休息室”。它是一个包含类似教程的网站,其中包括最佳实践、示例代码等等。Umbraco 开发者休息室将于 2005 年第二季度发布,并将以每年 300 欧元/用户的低廉年费(或每月 30 欧元)提供。

您可以使用 .NET 控件与 umbraco 协同工作,无论是用户控件(.ascx 文件)还是自定义控件(.dll),都可以使用宏。您甚至可以通过使用公共属性和宏元素与您的控件进行通信。

本文档将告诉您如何实现这两种类型的控件以及如何进行通信。

复制文件

[编辑 | 编辑源代码]

首先,您需要复制您的控件。无论是用户控件还是自定义控件,您都需要将程序集(dll)复制到 umbraco 安装的 /bin 文件夹中。如果是用户控件,您还需要复制 .ascx 文件。您的安装程序中已经包含一个 /usercontrols 文件夹,我们建议您使用它,但您也可以将其放置在应用程序中的任何位置。

我们有一个名为 HelloWorld 的用户控件,它是在 Visual Basic.NET 中编写的,其中包含一个文本框和一个按钮。让我们看一下项目文件夹中的文件

我们需要的是项目根目录下的 HelloWorld.ascx 文件,以及存储在 bin 文件夹中的 HelloWorld.dll 文件。

我们将把 HelloWorld.ascx 复制到 /usercontrols/HelloWorld.ascx,并将 HelloWorld.dll 复制到 /bin/HelloWorld.dll。现在我们已经准备好使用宏将用户控件注册到 umbraco 中了!

使用宏注册 .NET 控件

[编辑 | 编辑源代码]

为了能够直接从 umbraco 中使用 .NET 控件,有必要将它们注册到一个宏中。因此,打开 umbraco,进入“开发人员”部分,右键单击宏文件夹。选择创建,并将其命名为“HelloWorld”。

现在,在打开的宏文件夹中选择 HelloWorld 宏,并在名为“类型”的字段中输入“usercontrols/HelloWorld.ascx”,如以下屏幕截图所示

点击保存按钮,您就可以像使用其他宏一样使用 HelloWorld.ascx 用户控件了。就是这样!如果您使用的是程序集,则程序集应该是您的 dll 的名称(不带 dll 扩展名),并且类型应该是包括命名空间的完整名称!

通过元素和公共属性进行通信

[编辑 | 编辑源代码]

通过在您的控件中创建公共属性,并将它们与宏元素匹配,您就可以直接从 umbraco 内部与您的控件进行通信。umbraco 甚至会在插入宏时创建 UI。重要的是,宏元素的别名要与公共属性的名称匹配,并注意大小写敏感性!

首先,让我们在 HelloWorld 用户控件中创建一个公共属性,并将其也命名为“HelloWorld”。如果未回发,我们将把文本框内的文本设置为公共属性的内容,以下是使用 Visual Basic.NET 进行操作的简单方法,您可以使用任何受 .NET 支持的语言(如 C# 或 Delphi.NET)

编译并再次复制上面描述的文件。

接下来,我们需要创建一个宏元素,因此返回 umbraco 并编辑“HelloWorld”宏。复选框(缺少标签)表示元素在插入宏时是否应该向用户显示,因此选中它。元素的别名应该与公共属性的名称完全相同,并且注意大小写敏感性。如果您点击“浏览属性”按钮,您可以选择您想要的公共属性,umbraco 会创建它们。

元素的名称是用户在插入宏时在 umbraco 内部看到的名称,因此输入一些有意义的名称,例如“回发时的消息”。接下来,确定要创建的元素类型,在与 .NET 控件一起使用时,它只与用户将看到的 UI 有关(不同于使用 XSLT 宏,其中类型会影响宏将使用的 XML)。选择“文本”,因为我们将让用户输入一条消息。点击添加。

就这样,现在 umbraco 可以与您的控件进行通信了!让我们试一试!

插入宏

[编辑 | 编辑源代码]

Umbraco 默认情况下不会将 .NET 服务器端表单插入到您的内容中。如果您在控件中使用服务器端元素(带有属性 runat=”server”),那么在模板的顶部和底部插入 <?ASPNET_FORM> umbraco 标签非常重要。

要插入包含 .NET 控件的宏,您需要进入“设置”内的模板部分,或者直接在编辑器中插入。在本示例中,我们将将其插入模板中。

打开一个模板,例如如果您使用的是示例站点,则打开“Textpage”模板。在“<?UMBRACO_GETITEM/>”标签之前新建一行,然后点击工具栏上的插入宏按钮()。选择“HelloWorld”宏,您应该看到以下内容

输入您喜欢的任何内容,然后点击确定。您的模板现在应该看起来像这样

点击保存按钮,然后查看使用您的宏的页面。它应该看起来像这样


尝试更改文本框中的文本,然后点击按钮。Umbraco 甚至会处理状态。

同一页面上的多个 .NET 控件宏

[编辑 | 编辑源代码]

如果您在一个页面上使用多个相同的 .NET 控件宏的实例,或者您只是想确保分配给控件的 Id,则可以在 <?UMBRACO_MACRO> 标签中添加一个额外的属性,称为“controlID”。为此,上面的标签将如下所示

<?UMBRACO_MACRO macroID=”7” HelloWorld=”It worked!”
controlID=”HelloWorld1”></?UMBRACO_MACRO>

如您所见,在 Umbraco 中使用 .NET 控件非常容易,而且您可以使用现有的、不是为 Umbraco 而制作的控件。尽情享受…

针对 .NET 2.0 开发人员的重要提示

[编辑 | 编辑源代码]

为了成功编译 Umbraco 2.xx 的用户控件,请从 MSDN 下载Visual Studio 2005 Web 应用程序项目。安装完附加组件后,您可以像在以前的 Visual Studio.NET 版本中一样创建项目。

在为 Umbraco 开发时,请特别注意,您在单独的代码文件中使用旧的代码隐藏指令,而不是 .NET 2.0 引入的新代码文件指令

在递归宏中使用 Dot NET 控件

[编辑 | 编辑源代码]

使用 `umbraco.library.RenderMacroContent` 方法,你可以渲染一个控件并创建一个 "递归宏"。

使用 Dot NET 控件则不可行,因为在 `RenderMacroContent` 中创建的控件会被转换为字符串,然后丢失:它不会被添加到 `Page.Controls` 中,因此不会调用你控件的任何处理程序。

华夏公益教科书