我用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 ??? 感谢
答案 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();
...
}
}