ASP.NET MVC AspNet.Identity - Как сохранить зарегистрированный идентификатор пользователя в созданной записи? - PullRequest
0 голосов
/ 04 сентября 2018

Я создаю CRUD, который доступен только зарегистрированным пользователям, и я пытаюсь добавить дополнительную информацию (идентификатор пользователя) в записи crud. Как мне получить пользовательский идентификатор и сохранить его вместе с записью?

Вот мой контроллер

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

    }
}

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 04 сентября 2018

Вы можете получить к нему доступ по-разному, в зависимости от того, где вы находитесь в коде, но поскольку вы находитесь в контроллере, у вас должен быть такой метод расширения, как этот User.Identity.GetUserId(); В этом случае это будет строка, но вы можете ее проанализировать, но убедитесь, что ваша таблица AspNetUsers имеет идентификатор типа данных 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...

Здесь у вас есть для этого более подробная информация:

...