Sharepoint项目更新事件 - 取消事件回到editform页面?

时间:2010-01-12 16:28:19

标签: sharepoint event-receiver

我有一个内容类型的事件接收器来验证ItemUpdating事件中的某些数据。如果我取消事件(例如某些数据无效),我将属性cancel设置为true:

properties.Cancel = true;
properties.ErrorMessage = "...";

SharePoint取消更新事件确定,但显示标准SharePoint错误页面(带有指定的消息)。唯一的问题是,我抱怨这实际上并不是非常有用 - 我们应该返回EditForm页面,以便更新细节。

有没有人这样做,有一个简单的方法吗?我唯一的建议是我可以实现自己的错误页面,但这对于(理论上)简单的过程来说是一个非常重要的解决方案。

2 个答案:

答案 0 :(得分:3)

您可以尝试在ErrorMessage中输出HTML代码(也包括javascript)。但即使你这样做,问题在于你无法安全地回到用户输入的数据。您要么进行HTTP / 301重定向,然后是新页面加载,要么使用JavaScript使客户端转到history.back(),然后浏览器可能会重新加载页面。

执行此操作的官方方法是创建列表定义并自定义列表模板。然后编辑编辑表单模板并根据需要包含尽可能多的ASP.Net验证器控件。然后,根据需要实现服务器端逻辑。本文解释了该技术:http://msdn.microsoft.com/en-us/library/aa543922.aspx

编辑:要附加用于编辑特定内容类型的自定义控件,请将XmlDocuments部分添加到ContentType定义中。例如,像这样

<ContentType
    ..........

    <XmlDocuments>
      <XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
        <FormTemplates xmlns="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
          <Display>ContentTypeName_DispForm</Display>
          <Edit>ContentTypeName_EditForm</Edit>
          <New>ContentTypeName_NewForm</New>
        </FormTemplates>
      </XmlDocument>
    </XmlDocuments>
  .......

然后您创建自己的yoursolution_controltemplates.ascx文件,其中包含以下块:“

<SharePoint:RenderingTemplate ID="ContentTypeName_DispForm" runat="server"> 
<Template>
      <!-- put whatever controls you need here, we typically create a 
           separate custom control which implements everything-->
</Template>
</SharePoint:RenderingTemplate>

答案 1 :(得分:0)