ASP.NET 内容编辑器控件,用于基本内容管理

分享于 

16分钟阅读

Web开发

  繁體

介绍

这个网页控制提供了维护网站页面内容的能力,不需要使用任何客户端软件或者重量级服务器端内容管理系统。 我发展这个控制的原因是我有一个现有的ASP.NET 网站,我想在任何地方快速地更新它的内容。 你可以访问 www.goodforyourecords.co.uk 插件,它演示了这个控制。 它很容易集成到你的站点,并且易于使用。 控件允许你编辑。预览和保存内容到数据库,并通过 FreeTextBox 控件的使用提供全面的编辑。

这里控件的设计目的是:

  • 在 ASP.NET 页面中编辑和预览HTML内容
  • 使用数据库保存和检索内容( MS Access/SQL Server/SQL Express/SQL compact Edition )
  • 允许控件显示的内容通过使用查询字符串参数来更改
  • 允许控件的多个实例驻留在单个页上
  • 轻松修改现有页面以合并内容控件
  • 使用IE7和 Firefox 3.0.5测试

它不执行的操作:

  • 管理站点的页面结构( 它不是内容管理系统) !
  • 允许多用户编辑( 没有实现锁定功能- 还没有实现)

将这里控件合并到你的页面中很简单:

  • 在 Visual Studio 中,将 ContentEditor 控件添加到工具箱并将控件放到页面上
  • 将内容ID分配给控件
  • 将空的数据库文件放到你的应用程序 App_Data 目录的网站中
  • 将一些配置项添加到你的web.config
  • 验证当前用户以允许编辑开始。

就是这样- 你现在有一个网页可以通过你的网页浏览器在线编辑内容。

将ContentEditor控件添加到页

演示项目提供了一个简单的例子,说明如何使用 ContentEditor 控件进行操作。 xml - 文件包含四个控制实例,三个实例演示了使用查询字符串参数切换内容的思想- - 稍后将对此进行详细介绍。 还有一个演示登录页面,它提供了验证用户以使他或者她修改这些实例内容的方法。 如果你的站点已经有了对用户进行身份验证的方法,那么你可能不需要这样做。 如果你没有,你需要至少将这个页面添加到你的网站- 别担心,这很简单。

向你的网站添加ContentEditor的步骤

将控件添加到 Visual Studio

在 Visual Studio 中打开网站,并将控件添加到工具箱。 通过 View-> 工具箱完成这里操作。 在工具箱面板中右键单击,然后选择"选择项目"。 在 the".NET 框架组件"选项卡,单击"浏览",然后在源代码项目中找到 ContentEditor.dll的bin文件夹。 单击"打开",然后单击"行"。 控件DLL应该已经复制到 bin文件夹中,现在可以在工具箱中使用了。 现在应该能够将控件拖放到页面的设计图面上。

在 properties grid中,将控件的ContentId 设置为唯一的字符串值。 这里标识将由控件显示的内容。

将配置添加到 Web.Config

将以下配置添加到你的web.config file:

<appSettings><addkey="ContentEditor.ContentDataProviderAssembly"value="ContentEditor"></add><addkey="ContentEditor.StyleSheetUrl"value="ContentEditor.css"></add></appSettings>

你将需要从演示项目中将 ContentEditor.css 样式表复制到你的网站的root 目录。 如果希望使用其他文件夹,请修改 ContentEditor.StyleSheetUrl的值以指定适当的路径。

现在,你需要决定使用哪种类型的数据库来保存内容。 迄今为止,最简单的解决方案是使用 MS Access 或者 compact 版本的流程数据库。 没有数据库管理需要担心,只需要一个文件放到文件夹 App_Data。 对于小站点来说,它是最好的选择。 并非所有isp都支持 SQL compact,如果你的支持,则选择 MS Access。 选择 MS Access,然后将以下内容添加到你的web.config的<appSettings> 元素:

<addkey="ContentEditor.ContentDataProviderType"value="ContentEditing.OleDb.OleDbContentDataProvider"></add>

如果你希望使用 SQL compact,SQL Express 或者 SQL Server,请添加以下内容:

<addkey="ContentEditor.ContentDataProviderType"value="ContentEditing.LinqSql.LinqSqlContentDataProvider"></add>

如果使用 MS Access 或者 SQL compact,请将 。mdb ( 用于 MS Access ) 或者。sdf ( 用于 SQL compact ) 数据库文件复制到你的网站App_Data文件夹中。 对于 MS Access,将以下内容添加到你的web.config file: 中的<connectionStrings> 元素中

<addname="ContentEditor.WebContentDatabase"connectionString="provider=Microsoft.Jet.OLEDB.4.0;
 data source=|DataDirectory|WebSiteContent.mdb"/>

对于 SQL compact,请使用:

<addname="ContentEditor.WebContentDatabase"connectionString="data source=|DataDirectory|WebSiteContent.sdf;
 Persist Security Info=false"/>

对于 SQL Express 或者 SQL Server,你需要使用 SQL Server Management Studio手动设置数据库。 可以使用 ContentEditor 项目中的CreateContentTable.sql SQL脚本来创建所需的table。 设置连接 string accordingly; 例如对于 SQL Server:

<addname="ContentEditor.WebContentDatabase"connectionString="Data Source=localhost;Initial Catalog=WebSiteContent;
 Integrated Security=True"/>
验证用户以编辑内容

现在,你需要启用经过验证的用户编辑内容的能力。 如上所述,可以使用站点的现有认证机制,或者如果没有,则从演示站点复制登录页面( Login.aspx )。 ContentControl 类提供了两种 static 方法来控制编辑行为:

///<summary>/// Enables content editing for the current user session./// Once enabled, content can be edited and viewed in preview mode.///</summary>publicstaticvoid EnableEditingForCurrentSession()///<summary>/// Disables content editing for the current user session./// Once disabled, the content is output without /// any modification by this control.///</summary>publicstaticvoid DisableEditingForCurrentSession()

验证机制认为用户可以编辑内容后,只需调用 EnableEditingForCurrentSession。 这将允许用户在客户端会话期间编辑和预览内容。 调用 DisableEditingForCurrentSession 禁用对客户端会话的任何编辑,并将控件切换到视图模式。 用户注销时调用这里方法。

如果你选择使用演示项目中的登录页面,只需将页面复制到你的网站。 你需要将用户名和密码的用户名添加到你的web.config,如下所示:

<authenticationmode="Forms"><formsname="appNameAuth"protection="All"timeout="30"><credentialspasswordFormat="Clear"><username="user"password="password"/></credentials></forms></authentication>

默认情况下,成功的身份验证会导致重定向到 Default.aspx。 通过设置登录页使用的ASP.NET 登录控件的DestinationPageUrl 属性,将这里更改更改为所需的页。

编辑之前只需要一个最后的修改。 因为通过控件编辑内容时,你允许HTML发送回站点,ASP.NET 将验证请求以确保它的不包含任何恶意的跨站脚本。 你必须将 validateRequest 属性设置为以下值,才能为你的页面禁用这里功能 false 在页指令上按如下所示:

<%@PageValidateRequest="false"%>

编辑网站内容

调用 EnableEditingForCurrentSession 后,就可以编辑当前客户端会话的内容。 控件的所有实例都将呈现,如图 2所示。 这是"预览"模式。

Figure2.png

图 2 - 预览模式

这里,内容 ID。原始创建日期和最后一个修改日期显示为 上面。 内容显示为最终用户将查看的内容。 单击"编辑"按钮将控件切换到"编辑"模式,FreeTextBox 控件可以在HTML和设计模式下修改内容,如图 3所示。

Figure3.png

图 3 - 编辑模式

单击"保存"将永久更新内容并恢复到"预览"模式,新内容可以在其中预览。 现在再也不能恢复到原始内容了。 单击"取消"将恢复到"预览"模式,将原始内容保留不变。 单击"预览"将恢复到"预览"模式,允许你查看更改,但是在这种情况下,应该还原原始内容。 此外,最终用户还没有看到你的更改。

Figure4.png

图 4 - 具有挂起更改的预览模式

图 4显示了"预览"模式中的控件,其中内容未被永久更新。 这是由红色边框表示的。 如果你对这些更改不满意,点击"取消"将会将内容恢复到原始内容。 如果你对所看到的内容感到满意,单击"保存"将更新内容。 在这两种情况下,你都处于"预览"模式。 单击"编辑"允许对已经修改的内容进行进一步修改。 最终用户在你单击"保存"永久更新更改之前,不会看到你的更新。

当调用 DisableEditingForCurrentSession 时,控制切换到"视图"模式。 在这种情况下,控件只呈现"预览"模式中呈现的内容,除了所有编辑功能都被移除。 页面呈现为最终用户将看到它。

使用查询字符串参数修改内容 ID

控件的一个非常有用的特性是通过在页请求的查询字符串中传递参数来修改页面上任何实例的内容 of。 这样,同一控件实例就可以为不同的页面访问显示不同的内容。 如果页上有多个实例,则单个查询字符串可以指定多个 remappings。 通过在包含此类查询字符串的实际内容本身中创建超链接,可以实现分页形式,如演示项目演示的那样。

Figure5.png

图 5 -"下一步"超链接更改控件实例的内容 ID

在图 5中,使用以下URL定义了"下一步"超链接:

/Default.aspx?ids=ContentEditor1,Content%20A2

例如如果未提供查询字符串,则"contenteditor1"的默认内容ID是在ASPX标记中指定的,因此该ID的内容将显示在 displayed。 在加载页面时,在加载页面时,将内容ID分配给ID为"contenteditor1"的实例,重写默认值,并导致加载"内容 A2"的内容。 图 6是用户看到的内容。

Figure6.png

图 6 -"上次"超链接将控件实例的内容ID修改回原始值

在图 6中,"上一个"超链接是用URL定义的:

/Default.aspx?ids=ContentEditor1,Content%20A

这将设置内容 ID,例如"contenteditor1"回到"内容a"的原始值。 当用户单击这个链接时,他们会看到图 5所示的内容。 我们现在有一些基本的分页,允许用户在相同的控件实例中在"内容A"和"内容 A2"之间移动。

控件的PreserveIdRemapping 属性,当设置为 true ,允许你指定在页请求的查询字符串中接收的重映射对用户会话持续时间的影响。 通过请求没有查询字符串重写的同一页,控件实例的任何前一个重映射都不会使用。 设置为 false 如果请求页,并且在查询字符串中没有重写,则使用标记中的默认值,无论以前的重映射。 这里功能的目的是允许控件显示用户在网站中未定义内容的页面中的最后一个内容。 特别是,在有多个内容控件实现单页分页的情况下,它非常有用。 通过保留重映射,单击一个实例中的"下一步"超链接并不会导致返回该页的原始内容。

自定义ContentEditor控件

更改外观

可以能需要更改控件的外观,例如,更改预览边框的颜色或者样式,以便在它的使用的网站中。 通过更改配置文件中指定的ContentEditor.StyleSheetUrl 属性定义的样式表中的样式来实现这一。

创建新的内容提供程序

这种控制使用策略 Pattern 设计,即如果需要将数据存储在SQL服务器或者 MS Access 数据库之外的数据源中,那么你就可以插入不同的内容提供程序。 为这里,需要创建一个实现 ContentEditor.IContentProvider 接口的类,并遵循源文件中XML注释所描述的协定。 然后,在配置文件中,只需更改 ContentEditor.ContentDataProviderAssembly 属性指定包含新类型的程序集的名称,并且 ContentEditor.ContentDataProviderType 若要指定新类型的名称。

企业 环境保护

多用户访问

目前,多个用户并不安全地编辑内容,而且不受它的他用户覆盖的危险的影响。 因此,将来的增强是引入某种形式的锁定,只允许一个用户一次更改内容。

访问控制

可以为不同的用户分配不同的角色。 在"编辑器"角色中的用户可以更新内容,但是只有"审批者"角色中的用户可以通过最终用户批准更新。

历史记录

  • 1.0 - 19 2009年01月 - 初始版本。

MAN  控制  asp  asp-net  EDI  Basic  
相关文章