TryUpdateModelAsync с измененным значением - PullRequest
0 голосов
/ 07 декабря 2018

Я обновляю свою базу данных с помощью привязки модели следующим образом:

var adminUpdate = await _context.Admins.FindAsync(Id);

if (!String.IsNullOrEmpty(Password)) {
    if (Password != PasswordCheck) {
        ModelState.AddModelError("Password", "Passwords do not match");
    } else {
        byte[] data = Encoding.UTF8.GetBytes(Password + Configuration["SomeLocation:SomeKey"]);
        data = SHA512.Create().ComputeHash(data);
        password = Convert.ToBase64String(data);
    }
} else {
    password = adminUpdate.Password;
}

if (!ModelState.IsValid) {
    return Page();
}

if (await TryUpdateModelAsync(
    adminUpdate,
    "",
    a => a.FirstName,
    a => a.LastName,
    a => a.Email,
    a => a.Password, // must be the value of "password"
    a => a.Status,
    a => a.CompanyId
    ))
{
    await _context.SaveChangesAsync();
    return Redirect("/admin");
}

Моя проблема в том, что мне нужно вставить переменную «пароль» в поле пароля базы данных вместо a.Password.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

В вашем примере вызов TryUpdateModelAsync заканчивается настройкой свойств вашего экземпляра adminUpdate на основе значений, найденных в ModelState.Если вы хотите установить другое значение для Password, вы можете просто сделать это после вызова TryUpdateModelAsync, например:

if (await TryUpdateModelAsync(
    adminUpdate,
    "",
    a => a.FirstName,
    a => a.LastName,
    a => a.Email,
    a => a.Status,
    a => a.CompanyId
    ))
{
    adminUpdate.Password = password;
    await _context.SaveChangesAsync();
    return Redirect("/admin");
}

В приведенном выше примере я также удалил a => a.Passwordот TryUpdateModelAsync, поскольку теперь он является избыточным - любое значение, которое устанавливается, переопределяется в явном присваивании перед вызовом SaveChangesAsync.

0 голосов
/ 08 декабря 2018

Можете ли вы попытаться добавить новую строку (прямо над TryUpdateModelAsync)

adminUpdate.Password = password;
if (await TryUpdateModelAsync(
    adminUpdate,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...