我正在使用ASP.NET MVC 5 Razor
我正在尝试将成员资格userID应用于隐藏字段,以便我可以将表数据与特定用户相关联。
(用户完成存储在表中的表单,用于关联登录配置文件的userID)
我只是不知道如何做到这一点,并且是我当前项目和未来项目的重要组成部分。
任何指导,建议和解决方案的链接都会有很大的帮助,因为我对此完全不知所措。
我尝试从视图的模型类传递数据,但是我收到一条错误,说“当前上下文中不存在名称'User'”
这是我的模型类的摘录
using System;
using System.Web;
using System.Web.Mvc;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Globalization;
using System.Web.Security;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
namespace mySite_Site.Models
{
[Table("accountInfo")] // Table name
public class accountInfo
{
[Key]
public int AccountID { get; set; }
public int UserIdent { get; set; } //this is the field that would store the userID for association
public string LastName { get; set; }
public string FirstName { get; set; }
public string Locality { get; set; }
public string EmailAddress { get; set; }
public bool Active { get; set; }
public DateTime LastLoggedIn { get; set; }
public string UserIdentity = User.Identity.GetUserId();
}
答案 0 :(得分:2)
你只需要这样的东西,假设你的ViewModel上有用户个人资料。
@Html.HiddenFor(m=>m.UserProfile.UserId)
答案 1 :(得分:2)
由于您的模型不在控制器中,因此您需要明确告知用户对象的代码 Where ,它包含在HttpContext中。所以,在这里更新这一行:
public string UserIdentity = User.Identity.GetUserId();
以下
public string UserIdentity = HttpContext.Current.User.Identity.GetUserId();
控制器和视图基类具有对当前HttpContext的引用,这就是为什么您可以在这些项中快捷方式并只使用User.Identity
。在项目的其他任何地方,您都需要完全限定的HttpContext.Current.User
。
修改强>
在进一步查看代码时,您似乎试图将用户ID保存为数据库中的列。在这种情况下,我认为(根据您的代码示例)您应该删除最后一部分 - public string UserIdentity = User.Identity.GetUserId();
。保存新的帐户信息对象时,您可以在此处保存用户ID。
var info = new accountInfo();
accountInfo.UserIdent = HttpContext.Current.User.Identity.GetUserId();
db.accountInfos.Add(info);
db.SaveChanges();
答案 2 :(得分:2)
扩展Brandon O'Dell的答案,在该代码块中使用“Membership”对我不起作用(未处理的错误)。尽管如此,我认为他对这种解决方案的处理方法很棒,因为这意味着你几乎可以从任何地方调用当前用户的ID。所以,我继续前进并玩了一些代码,并且瞧!!
如果使用“会员资格”也不适合您,请尝试以下方法:
using <your project's name>.Models
public class GeneralHelpers
{
public static string GetUserId()
{
ApplicationDbContext db = new ApplicationDbContext();
var user = db.Users.FirstOrDefault(u => u.UserName == HttpContext.Current.User.Identity.Name);
return user.Id;
}
}
这个获取整个用户,因此,您可以在此“GeneralHelper”类(或您希望提供的任何名称)中创建更多方法,以获取当前用户的信息并在您的应用程序中使用它。
谢谢,布兰登!
答案 3 :(得分:1)
为什么不创建一个静态助手类?
public static class UserUtils
{
public static object GetUserId()
{
return Membership
.GetUser(HttpContext.Current.User.Identity.Name)
.ProviderUserKey;
}
}