当我不想修改一个属性时,它不起作用,对 ef core 的问题
When i want don't modified one Attributes,It's not work,question for ef core
我不想修改为 null 或空的用户密码,
我搜索了很长时间,但没有用
你能给我一些建议吗?
public async Task<IActionResult> Edit(int ID, [Bind("UserId,UserPassword,Username,Fullname,Nickname,Sex,Status,Email,Tel,Mobile,Address,Province,City,PostCode,UserType")] User user)
{
if (ID != user.UserId)
{
return NotFound();
}
if (ModelState.IsValid)
{
if (string.IsNullOrEmpty(user.UserPassword))
{
context.Attach(user);
context.Entry(user).Property("UserPassword").IsModified = false;
}
else
{
user.UserPassword = main.Md5(user.UserPassword);
}
context.Update(user);
await context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(user);
}
这是cshtml
enter image description here
不要在您的操作中接收用户,而是创建一个视图模型并使用它来更新您的用户信息。
示例:
public class UserViewModel {
public string UserId { get; set; }
public string UserPassword { get; set;}
... // other properties
}
public async Task <IActionResult> Edit(int ID, UserViewModel viewModel) {
if (ID != viewModel.UserId) {
return NotFound();
}
if (ModelState.IsValid) {
var user = context.Users.FindAsync(viewModel.UserId);
user.Password = !string.IsNullOrEmpty(viewModel.Password) ? main.Md5(viewModel.Password) : user.Password;
// update other properties here
await context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(user);
}
试试下面的代码:
context.Update(user);
context.Entry<User>(user).Property(x => x.UserPassword).IsModified = false;
context.SaveChanges();
Update 方法将所有属性标记为已修改,您应该在它之后更改 IsModified 的状态。
我不想修改为 null 或空的用户密码,
我搜索了很长时间,但没有用
你能给我一些建议吗?
public async Task<IActionResult> Edit(int ID, [Bind("UserId,UserPassword,Username,Fullname,Nickname,Sex,Status,Email,Tel,Mobile,Address,Province,City,PostCode,UserType")] User user)
{
if (ID != user.UserId)
{
return NotFound();
}
if (ModelState.IsValid)
{
if (string.IsNullOrEmpty(user.UserPassword))
{
context.Attach(user);
context.Entry(user).Property("UserPassword").IsModified = false;
}
else
{
user.UserPassword = main.Md5(user.UserPassword);
}
context.Update(user);
await context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(user);
}
这是cshtml enter image description here
不要在您的操作中接收用户,而是创建一个视图模型并使用它来更新您的用户信息。
示例:
public class UserViewModel {
public string UserId { get; set; }
public string UserPassword { get; set;}
... // other properties
}
public async Task <IActionResult> Edit(int ID, UserViewModel viewModel) {
if (ID != viewModel.UserId) {
return NotFound();
}
if (ModelState.IsValid) {
var user = context.Users.FindAsync(viewModel.UserId);
user.Password = !string.IsNullOrEmpty(viewModel.Password) ? main.Md5(viewModel.Password) : user.Password;
// update other properties here
await context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(user);
}
试试下面的代码:
context.Update(user);
context.Entry<User>(user).Property(x => x.UserPassword).IsModified = false;
context.SaveChanges();
Update 方法将所有属性标记为已修改,您应该在它之后更改 IsModified 的状态。