Здравствуйте, мне нужно обновить данные пользователя с помощью Identity
. Есть такой метод контролера :
[HttpPost]
public async Task<ActionResult> Edit(WDetailsModel model)
{
if (ModelState.IsValid) {
try
{
var upd_user = new ApplicationUser
{
About = model.About,
City = model.City,
Country = model.Country,
FName = model.F_Name,
LName = model.L_Name,
WebSite = model.WebSite,
Phone = model.Phone,
Email = model.Email,
};
var result = await UserManager.UpdateAsync(upd_user);
if (!result.Succeeded)
{
foreach (var err in result.Errors)
{
ModelState.AddModelError("", err);
}
}
else
{
ViewBag.Result = "Новые данные сохранены";
return View();
}
}
catch (Exception ex)
{
ModelState.AddModelError("", ex.Message);
}
}
return View(model);
}
Однако при попытке сохранить изменения получаю ошибку :
Name cannot be null or empty.
Если же поставить UserName
, тем же что и у текущего User.Identity.Name
выпадет ошибка о том, что пользователь с таким именем уже существует. Логично но я же использую UpdateAsync
а не CreateAsync
. Может вообще все неправильно сделал ? Подскажите. И связанный вопрос - по умолчанию Identity
создает 6 таблиц при первом запуске - юзеры, клеймы, роли, миграции и т.д. Вопрос - если мне нужно создать еще несколько таблиц и работать с ними как поступить ? Нужно написать класс-модель этих таблиц ?
Ну так если вы пытаетесь у какого-то пользователя изменить имя на то, которое уже занято то и ругается, и так и должно быть, просто используйте уникальные имена.
И да, для ваших личных классов создавайте свои классы модели и прописывайте их в стиле EF Code First
public class ApplicationDbContext : IdentityDbContext
{
public DbSet<Class1> Class1s { get; set; }
public DbSet<Class2> Class2s { get; set; }
// ...
}
Обновлено:
Я обновление делаю обычно так:
ActionResult Edit(UserViewModel userViewModel ) {
var userOld = db.Users.Find(userViewModel.UserName);
if(userOld ==null) return null; // тут нужно статус код вернуть
userOld.Name = userViewModel.Name;
userOld.SomeField = userViewModel.SomeField;
// ...
db.SaveChanges();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
В данном запросе происходит поиск/проверка и вывод ID, фио в другую форму
Пытаюсь разобраться с PauseToken (Namespace: MicrosoftVisualStudio
Имеется данный код суть такая что нельзя выбирать больше 5 чекбоксов(у меня их 10)Все работает но проблема в том что когда человек возвращаться...
Есть сайт http://wwwlightelite