如何从asp.net mvc3中的成员资格数据库中检索用户ID?

时间:2012-05-27 11:08:50

标签: asp.net-mvc-3 linq membership

我用reg_sql创建了一个数据库,并将其添加到我的项目数据库中,用于memberip。现在我需要访问loged用户ID。以非常简单的方式,我想在一个视图中显示它以查看是否有doitwrk。我在我的控制器中的函数中使用此代码:

  var id = from ad in StoreDb.aspnet_Users where
  StoreDb.aspnet_Users.Name == System.Web.HttpContext.Current.User.Identity.Name 
  select ad.UserId;
  ViewBag.Message = id;

但在视野中我看到了:

  

System.Data.Objects.ObjectQuery`1 [System.Guid]

我要做的是检索用户ID ??? 感谢

2 个答案:

答案 0 :(得分:1)

在这种情况下,

var id代表ObjectQuery<System.Guid>您必须解析查询结果,例如:

foreach (Guid result in id)
  Console.WriteLine("UserID: {0}", result.ToString());

答案 1 :(得分:1)

这是一个可以放入控制器并在动作中使用它来获取ID的功能。当提供程序为您提供API以执行所有操作时,没有必要执行所有代码来查询成员资格数据库。

private Guid GetUserID() {
    var currentUser = Membership.GetUser(User.Identity.Name);
    var userID = (Guid)currentUser.ProviderUserKey;
    return userID;
}

public ActionResult Index() {
    var userID = GetUserID();
    ...
}

您还可以将该代码放入基本控制器中,以便可以从任何继承该控制的控制器访问该函数。这样可以保持代码干净(不要自己重复),这样就不会有代码重复

用法是

创建一个基本控制器并放在名为Controllers

Base下的文件夹中
namespace YourApp.Web.Controllers {
    public abstract class MyBaseController : Controller {

        protected Guid GetUserID() {
            var currentUser = Membership.GetUser(User.Identity.Name);
            var userID = (Guid)currentUser.ProviderUserKey;
            return userID;
        }
    }
}

现在,您可以通过继承它来在任何常规控制器中使用该基本控制器。

public class HomeController : MyBaseController {

    public ActionResult Index() {
        var userID = GetUserID();
        ...
    }
}