ASP.NET MVC AspNet.Identity - 如何将登录的UserID保存到创建的记录中?

问题描述 投票:1回答:1

我正在构建一个只有登录用户才能访问的CRUD,我正在尝试向crud记录添加额外信息(userid)。如何获取userId并使用记录保存?

这是我的控制器

public ActionResult Create()
{
    return View();
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "CompanyName,Telephone")]Company company)
{
    try
    {
        if (ModelState.IsValid)
        {
            db.Companies.Add(company);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
    }
    catch (DataException /* dex */)
    {

        ModelState.AddModelError("", "Unable to save changes.");
    }

    return View(company);
}

这是我的模特

namespace ProjectX.Models
{
    public class Company
    {
        //public int Id { get; set; }
        public int CompanyID { get; set; }
        public string CompanyName { get; set; }
        public string Telephone { get; set; }

    }
}

谢谢您的帮助!

c# sql asp.net asp.net-mvc asp.net-identity
1个回答
1
投票

你可以根据你在代码中的位置以不同的方式访问它,但是因为你在控制器中你应该有一个像User.Identity.GetUserId()这样的扩展方法;在这种情况下它将是字符串,但您可以解析它,但请确保您的表AspNetUsers具有id为int数据类型。假设这是真的你可以说:

[HttpPost, Authorize]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "CompanyName,Telephone")]Company company)
{
    try
    {
        if (ModelState.IsValid)
        {
            company.Id = int.Parse(User.Identity.GetUserId());
            db.Companies.Add(company);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
    }
    catch (DataException /* dex */)
    {
        ModelState.AddModelError("", "Unable to save changes.");
    }

    return View(company);
}

不要忘记应用[Authorize]属性。

如果您想将更多数据从用户保存到Company,那么您需要从数据库中获取用户,然后从中提取所需的用户数据,然后将它们保存在公司对象中,如下所示:

var user = UserManager.FindById(int.Parse(User.Identity.GetUserId()));
company.Username = user.Username;
//and so on...

Here你有更多的细节:

© www.soinside.com 2019 - 2024. All rights reserved.