请大家鉴定一段代码,一个获取当前用户的eventhandler
在讨论版中建一个qq字段,注册一个itemupdated,想要获取当前用户,
但是下面的代码用了几种方式都不行,全都返回SHAREPOINT\system
而SPContext.Current.Web.CurrentUser我也试过了,结果是eventhandler出错,什么都不显示。
大家帮看看哪里有问题,谢谢!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using Microsoft.SharePoint;
namespace DiscBoard
{
public class DiscBoard : SPItemEventReceiver
{
public override void ItemUpdated(SPItemEventProperties properties)
{
base.ItemUpdated(properties);
try
{
string user1 = properties.UserLoginName;
//string user2 = HttpContext.Current.User.Identity.Name;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
//SPUser user = SPContext.Current.Web.CurrentUser;
using (SPSite site = new SPSite(properties.SiteId))
{
using (SPWeb web = site.OpenWeb(properties.RelativeWebUrl))
{
string user2= SPContext.GetContext(web).Web.CurrentUser.LoginName;
string user = web.CurrentUser.LoginName;
SPList list = web.Lists[properties.ListId];
if (list.BaseTemplate.ToString() == "DiscussionBoard")
{
SPListItem item = list.GetItemById(properties.ListItemId);
this.DisableEventFiring();
item["qq"] = user+"|"+user1+"|"+user2;
item.Update();
this.EnableEventFiring();
}
}
}
}
);
}
catch (Exception)
{ }
}
}
}
[解决办法]
你用了提升权限 从新 new spsite 了 所以这种情况下
web.CurrentUser 就是管理员的账号,
建议需要提升权限的地方 在提升权限
不需要的地方 不要提升,
如果都需要spweb 这些东西
就分开写
[解决办法]
据我所知SPContext.Current在EventHandler中是不能用的吧,始终返回null吧,具体原因还有待深入研究,可能与EventHandler所处的阶段(相对于整个HttpRequest)有关,既然不能用,你就用properties.OpenWeb().CurrentUser来获取当前用户吧。
如果楼主对为什么SPContext在此处不能用感兴趣,也可以自己深入研究下。
[解决办法]