1

我已经使用 reg_sql 创建了一个数据库,并将其添加到我的项目数据库中以用于 membersip。现在我需要访问已登录的用户 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???谢谢

4

2 回答 2

1

var id在这种情况下表示ObjectQuery<System.Guid> 您必须解析查询的结果,例如:

foreach (Guid result in id)
  Console.WriteLine("UserID: {0}", result.ToString());
于 2012-05-27T11:23:24.817 回答
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();
        ...
    }
}
于 2012-05-27T11:34:29.173 回答