因为我通常都是配合UserControl来开发复杂的Webpart的,所以这里指的是包装在Webpart中的UserControl如何以Post方式提交数据到SharePoint数据库。
WSS站点默认不支持WEB应用程序通过POST的方法更新数据库数据,需要在Web应用程序中加入安全较验信息,这类安全较验信息包含两个不同的安全层次:为更新单个站点或站点集的安全较验、为更新网站所在虚拟服务器或WSS设置的安全较验。
第一种安全较验通常是应用程序更新站点中的业务数据时需要使用的安全较验,添加方法如下:
1 在ASPX页面头部加入以下申明(请注意该代码段必须在同一行上,否则编译器较验出错
):<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
2 在ASPX页面中为要提交的数据加入FormDigest较验控件,添加后的表单类似:
<form id="Form1" method="post" runat="server">
<SharePoint:FormDigest runat="server"/>
<asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 282px; POSITION: absolute; TOP: 282px" runat="server" Text="Button"></asp:Button>
</form>
<SharePoint:FormDigest runat="server"/>
<asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 282px; POSITION: absolute; TOP: 282px" runat="server" Text="Button"></asp:Button>
</form>
添加后ASPX页面有时候会出现不能进行可视化设计(原因未知),可以在加入FormDigest之前将页面部局设计好。
3 客户端请求带有验证控件的网页时,服务端为该请求生成HTML页面,同时在页面中加入安全较验信息,当客户端提交数据时,服务端较验安全信息,如果没有修改则不会触发异常,否则触发异常停止执行程序。
4 如果后台代码是执行SharePoint网站的管理任务,则需要更高的权限,做法是在CodeBehind文件中加入以下代码
SPGlobalAdmin globalAdmin = new SPGlobalAdmin();
Context.Items[SPGlobalAdmin.RequestFromAdminPort] = true;
Page.RegisterHiddenField("__REQUESTDIGEST", globalAdmin.AdminFormDigest);
Context.Items[SPGlobalAdmin.RequestFromAdminPort] = true;
Page.RegisterHiddenField("__REQUESTDIGEST", globalAdmin.AdminFormDigest);