如何在MVC中的任何类中获取用户标识?

时间:2017-04-10 14:26:24

标签: c# asp.net-mvc

我正在从搜索中检索社区列表。如果当前用户尚未加入社区,我想为加入添加按钮;如果当前用户已加入该社区,我想添加保留。我已将isMember()函数创建为

public bool IsMember(string UserID, int CommunityID)
{
    var Membership = db.Users.Include(x => x.CommunityUsers)
                             .Where(s => s.Id.Equals(UserID))
                             .Count();

    if (Membership > 0)
        return true;
    else
        return false;
}

但我如何在搜索功能中使用它?我需要在此函数中传递当前的UserID,但我无法执行此操作。这是我的搜索功能。

public ActionResult SearchCommunity(string searchString)
{
    if (!String.IsNullOrEmpty(searchString))
    {
        var UseriD = db.Users.Where(u => u.UserName == User.Identity.Name)
                             .Select(u => u.Id);

        ViewBag.communityQuery = db.Communities.Include(x => x.CommunityUsers)
                                        .Where(s => s.CommunityName.Contains(searchString))
                                        .ToList();
        ViewBag.Membership = IsMember(UseriD, ViewBag.communityQuery).ToList();

        return View();
    }

3 个答案:

答案 0 :(得分:1)

此代码将返回IEnumerable:

var UseriD = db.Users.Where(u => u.UserName == User.Identity.Name)
                     .Select(u => u.Id);

尝试使用:

var UseriD = db.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);

答案 1 :(得分:0)

您可以尝试以下代码:

var userId=User.Identity.GetUserId();

答案 2 :(得分:0)

首先需要获取当前的http上下文,然后才能获得用户:

var ctx = HttpContext.Current;
ctx.User.Identity.GetUserId();

如果您在MvcController,则可以使用User属性:

User.Identity.GetUserId();