我有一个内容类型的事件接收器来验证ItemUpdating事件中的某些数据。如果我取消事件(例如某些数据无效),我将属性cancel设置为true:
properties.Cancel = true;
properties.ErrorMessage = "...";
SharePoint取消更新事件确定,但显示标准SharePoint错误页面(带有指定的消息)。唯一的问题是,我抱怨这实际上并不是非常有用 - 我们应该返回EditForm页面,以便更新细节。
有没有人这样做,有一个简单的方法吗?我唯一的建议是我可以实现自己的错误页面,但这对于(理论上)简单的过程来说是一个非常重要的解决方案。
答案 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)
您可以尝试使用CopyUtil重定向:http://weblogs.asp.net/jan/archive/2008/02/26/copyutil-aspx-a-little-sharepoint-gem.aspx
link =“http://yoursite/_layouts/CopyUtil.aspx?Use=id&Action=dispform&ItemId=X&ListId=X&WebId=X&SiteId=X”;
Page.Response.Redirect(链接)
也许这会起作用