我有一个代表一个人的发布页面(一个联系表单,如果你愿意的话),我想让用户可以编辑表单中的一些信息(姓名,年龄,地点......)
所以我有一个编辑按钮,打开一个弹出窗口,其中包含允许用户更新的属性。
现在问题是:当用户按下保存按钮时,会抛出异常,说用户没有更新页面的权限。当我尝试结帐或更新页面时会发生这种情况
我的代码是:
Guid siteId = SPContext.Current.Site.ID;
Guid webId = SPContext.Current.Web.ID;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
//SPWeb currentWeb = SPContext.Current.Web;
using (SPSite site = new SPSite(siteId))
{
using (SPWeb currentWeb = site.OpenWeb(webId))
{
currentWeb.AllowUnsafeUpdates = true;
PublishingPage pubPage = PublishingPage.GetPublishingPage(SPContext.Current.ListItem);
pubPage.CheckOut();
pubPage.ListItem["EdificioContacto"] = dpEdificio.SelectedValue.ToString();
pubPage.ListItem["ExtensaoContacto"] = txtExtensao.Text;
pubPage.ListItem["FaxContacto"] = txtFax.Text;
pubPage.Update();
pubPage.ListItem.File.CheckIn("Alteracão de dados de utilizador. Processo automático");
pubPage.ListItem.File.Publish("Alteracão de dados de utilizador. Processo automático");
pubPage.ListItem.File.Approve("Alteracão de dados de utilizador. Processo automático");
currentWeb.AllowUnsafeUpdates = false;
}
}
有人可以帮忙吗?
编辑:我的异常是“无法评估表达式,因为代码已优化或本机框架位于调用堆栈之上”。
我之前在另一个类上遇到过这个异常,但它是通过使用webId和siteId来打开网站和网络解决的,所以我认为这样可以解决它。
EDIT2:我注意到当我尝试以“普通”用户登录时以编程方式将项目添加到共享点列表时,也会出现这种情况。
答案 0 :(得分:0)
检查此代码段:检查' ForceCheckout'
SPListItem item = SPContext.Current.ListItem;
//we cannot modify the page if we have a current item whos parent list has ForceCheckout set and the items file isn't checked out
bool canModifyPage = !(item != null && item.File != null && item.ParentList != null &&
item.ParentList.ForceCheckout && item.File.CheckOutStatus == SPFile.SPCheckOutStatus.None);
这也可能会对您的代码有所帮助:
Get PageLayout Name in Sharepoint but having a performance issue
修改:使用currentWeb.AllowUnsafeUpdates = true;
进行检查。
参考:PublishingPage.CheckOut Method
// Get the PublishingPage wrapper for the SPListItem that was passed in.
//
PublishingPage publishingPage = null;
if (PublishingPage.IsPublishingPage(listItem))
{
publishingPage = PublishingPage.GetPublishingPage(listItem);
}
else
{
throw new System.ArgumentException("This SPListItem is not a PublishingPage", "listItem");
}
// Check out the page if it is not checked out yet.
//
if (publishingPage.ListItem.File.CheckOutStatus == SPFile.SPCheckOutStatus.None)
{
publishingPage.CheckOut();
}
// Set and save some properties on the PublishingPage.
//
publishingPage.Title = newTitle;
publishingPage.Description = newDescription;
publishingPage.Contact = pageContact;
publishingPage.Update();
比较它的页面属性访问方法和你的..如果有什么问题那么检查它..
pubPage.ListItem["EdificioContacto"] = dpEdificio.SelectedValue.ToString();
pubPage.ListItem["ExtensaoContacto"] = txtExtensao.Text;
pubPage.ListItem["FaxContacto"] = txtFax.Text;
希望这有帮助..