首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

请大家鉴定一段代码,一个获取当前用户的eventhandler,该如何处理

2012-04-09 
请大家鉴定一段代码,一个获取当前用户的eventhandler在讨论版中建一个qq字段,注册一个itemupdated,想要获

请大家鉴定一段代码,一个获取当前用户的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在此处不能用感兴趣,也可以自己深入研究下。
[解决办法]

探讨

据我所知SPContext.Current在EventHandler中是不能用的吧,始终返回null吧,具体原因还有待深入研究,可能与EventHandler所处的阶段(相对于整个HttpRequest)有关,既然不能用,你就用properties.OpenWeb().CurrentUser来获取当前用户吧。

如果楼主对为什么SPContext在此处不能用感兴趣,也可以自己深入研究下。

热点排行