Asp.net mvc 3 如何在asp.net mvc3中从成员数据库中检索用户Id?

Asp.net mvc 3 如何在asp.net mvc3中从成员数据库中检索用户Id?,asp.net-mvc-3,linq,membership,Asp.net Mvc 3,Linq,Membership,我用reg_sql创建了一个数据库,并将其添加到membersip的项目数据库中。现在我需要访问登录的用户Id。以非常简单的方式,我想在视图中显示它,以查看doesitwrk与否。我在控制器的函数中使用以下代码: var id = from ad in StoreDb.aspnet_Users where StoreDb.aspnet_Users.Name == System.Web.HttpContext.Current.User.Identity.Name select ad.

我用reg_sql创建了一个数据库,并将其添加到membersip的项目数据库中。现在我需要访问登录的用户Id。以非常简单的方式,我想在视图中显示它,以查看doesitwrk与否。我在控制器的函数中使用以下代码:

  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???
谢谢

var id
在本例中表示
ObjectQuery
您必须解析查询结果,例如:

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

这里有一个函数,您可以将其放入控制器中,并在操作中使用它来获取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();
    ...
}
您还可以将该代码放入一个基本控制器中,以便可以从继承它的任何控制器访问该函数。这可以保持你的代码干燥(不要重复你自己),这样你就不会有代码重复

用法将是

创建一个基本控制器,并将其放入名为
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();
        ...
    }
}

感谢您的goos回答,但当我在基本控制器中装入GetUserId()函数时,我看到了以下错误:**错误1无法将类型“object”隐式转换为“System.Guid”。存在显式转换(是否缺少转换?)C:\Users\Taban\Documents\Visual Studio 2010\Projects\MVCAPApplication5\MVCAPApplication5\Controllers\Base\MyBaseController.cs 24 20 MVCAPApplication5**我现在该怎么办?抱歉,这是我的错。我修复了itI将强制转换添加到
(Guid)
,这样它就不会出错<代码>var userID=(Guid)currentUser.ProviderUserKey@Tena您之所以得到它,是因为属性
ProviderUserKey
返回
object
,因此必须将其强制转换为
Guid
。我测试过了,效果很好。非常感谢你,紫花苜蓿,我搜索了很多,但没有找到任何东西,你的答案对我来说很完美。