ASP.NET MVC将userID放在隐藏字段中

时间:2014-01-08 22:08:41

标签: c# asp.net asp.net-mvc razor

我正在使用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();
    }

4 个答案:

答案 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;           
        }
    }