[SharePoint 2010]如何定制事件处理程序的Error Pages

我想只要是做过MOSS开发工作的人都应该很熟悉EventHandler了吧,通过EventHandler我们可以在某些事件发生的时或发生后执行我们自定义的代码。大家可能都遇到过这种需求,就是在用户创建新的列表项目时可以对用户所输入的内容进行验证,在SharePoint 2007中我们怎么做呢?开发自定义字段类型?好是好,就是太麻烦了,有没有简单一点的方法呢?事件处理程序?这个好,实现起来也简单,我们可以在ItemAdding事件里获得用户输入的内容,然后根据一定的逻辑去判断用户输入内容的有效性,如果未通过就Cancle掉,这个方法是真好,可就是那个验证未通过后抛出的Error页面实在是太难看了,最终用户很少有能接受的,而且还经常被测试人员当BUG给指出来。。。。。。在SharePoint 2007中实在是没有什么好办法来解决这个问题,不过,幸运的是在SharePoint 2010中这个问题终于被解决了。

下面我将向大家介绍在SharePoint 2010中如何定制事件处理程序的Error Pages。

创建一个拥有自定制Error Page的事件处理程序

首先让我们打开VS 2010并且使用事件接受器模板创建一个新的事件处理程序。

[SharePoint 2010]如何定制事件处理程序的Error Pages

我们可以选择是创建一个场解决方案还是沙盒解决方案

[SharePoint 2010]如何定制事件处理程序的Error Pages

最后选择事件接受器的类型,由于我的这个例子是要验证用户的输入内容,所以在这里我选择创建一个ItemAdding类型的事件接受器。

[SharePoint 2010]如何定制事件处理程序的Error Pages

单击完成,随后我们会看到VS 2010自动为我们创建出了如下的结构的项目

[SharePoint 2010]如何定制事件处理程序的Error Pages

接下来要做的就是为我的事件处理程序添加代码,以处理一些简单的逻辑。打开EventReceiver1.cs,VS已经为我们建立好了大部分的内容,我只需添加一些核心的逻辑就可以了。

using System;

using System.Security.Permissions;

using Microsoft.SharePoint;

using Microsoft.SharePoint.Security;

using Microsoft.SharePoint.Utilities;

using Microsoft.SharePoint.Workflow;



namespace ItemAddingWithCustomErrorPage.EventReceiver1

{

    /// <summary>

    /// 列表项事件

    /// </summary>

    public class EventReceiver1 : SPItemEventReceiver

    {

       /// <summary>

       /// 正在添加项.

       /// </summary>

       public override void ItemAdding(SPItemEventProperties properties)

       {

           base.ItemAdding(properties);



           if (properties.AfterProperties["到期日期"]==null)

           {

               properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;



               properties.RedirectUrl = "/_layouts/ItemAddingWithCustomErrorPage/CustomErrorPage.aspx";

           }

       }



    }

}

下面要做的就是添加一个用于显示错误信息的应用程序页。首先添加一个新项,仍然是在SharePoint 2010模板中,选择应用程序页模板。

[SharePoint 2010]如何定制事件处理程序的Error Pages

Visual Studio 2010会自动创建一个名为Layouts的映射文件夹,它会映射到SharePoint安装目录中的Layouts目录。

[SharePoint 2010]如何定制事件处理程序的Error Pages

下面要做的就是编辑这个应用程序页面,我们可以自由的定制它的样式,以及其中要显示的信息。

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>

<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>

<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>

<%@ Import Namespace="Microsoft.SharePoint" %>

<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CustomErrorPage.aspx.cs" Inherits="ItemAddingWithCustomErrorPage.Layouts.ItemAddingWithCustomErrorPage.CustomErrorPage" DynamicMasterPageFile="~masterurl/default.master" %>



<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">



</asp:Content>



<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">

<div style="width:225px;float:left;">

    <asp:Image ID="Image1" runat="server" ImageUrl="/_layouts/ItemAddingWithCustomErrorPage/saw.png"/>

</div>

<div style="width:400px;">

    [SharePoint 2010]如何定制事件处理程序的Error Pages,希望能有更多的朋友能够加入到SharePoint这个大家园中来。

</div>

</asp:Content>



<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">

这是一个自定义的错误信息页面

</asp:Content>



<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server" >

这是一个自定义的错误信息页面

</asp:Content>



OK,到这里代码就全部写完了,让我们来测试一下吧,直接按"F5"就可以了,VS 2010会自动帮我们部署到SharePoint网站中。

让我来新建一条通知。

[SharePoint 2010]如何定制事件处理程序的Error Pages

为了测试我们定制的Error页面,我故意不输入到期日期,这样当触发ItemAdding事件时将判断到期日期字段的值为空,从而Cancle掉这个ItemAdding事件,并跳转到我们所定制的Error Page。

[SharePoint 2010]如何定制事件处理程序的Error Pages

OY,成功了。显然我这个错误信息页面比较简陋,大家在项目中可以将这个Error Page做的尽可能好一些,从而使用户可以很容易的知道自己究竟在哪里出了错。

 

你可能感兴趣的:(SharePoint)