我在“Manager”类中有一个简单的模型/控制器设置(在ASP.NET MVC中),其中包含有关客户端的信息,包括密码字段。我希望管理员记录的编辑表单仅在输入新密码时更新密码字段,而不是使用完整的单独控制器/视图来更新密码。 (假设是管理员类型的用户正在编辑管理员记录)。
在下面的代码中,我取出了其他字段的属性以节省空间......
public class Manager
{
public int ManagerID { get; set; }
public string ManagerName { get; set; }
public string Phone1 { get; set; }
public string Phone2 { get; set; }
public string Email { get; set; }
public string OrganizationName { get; set; }
public string OrganizationType { get; set; }
public string Notes { get; set; }
public bool Active { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Update Password")]
public string Password { get; set; }
}
My Manager View和ManagersController都具有默认生成的代码。 Edit方法定义是:
public async Task<IActionResult> Edit(int id, [Bind("ManagerID,ManagerName,Phone1,
Phone2,Email,OrganizationName,OrganizationType,Notes,Active,Password")]
Manager manager)
{
.
.
.
_context.Update(manager);
await _context.SaveChangesAsync();
}
所以在这一点上,如果我将密码留空,它当然会用空值更新记录。我需要做两件事:1。检查以确保Password值不为null,并且2.如果它不为null,则允许它更新,否则在表中更新密码值,但是然后允许其余的字段要更新。
如您所见,密码字段已绑定。我想知道我是否需要手动绑定它,或者当它为null时取消绑定它,或者类定义中有什么东西可以帮助?...我只是不知道。
答案 0 :(得分:1)
尝试使用好的ol&#39;支持领域。如果没有涉及逻辑,则自动属性很好,但在这种情况下,我认为在更新字段之前,如果传递的值是否为null,则可以执行以下操作:
private string password;
[DataType(DataType.Password)]
[Display(Name = "Update Password")]
public string Password
{
get
{
return password;
}
set
{
if (!string.IsNullOrEmpty(value))
{
password = value;
}
}
}
答案 1 :(得分:1)
我发现了另一个类似的问题,我从中得出了答案:
Field is updating with null value...
要处理的物业太多了! (我习惯了低级语言)。在保存数据的调用之前,如果密码为null,则将Password字段的IsModified属性设置为false。然后它不会更新数据库中的字段:
_context.Update(manager);
if (manager.Password == null)
{
_context.Entry(manager).Property(x => x.Password).IsModified = false;
}
await _context.SaveChangesAsync();
我在这里只是一个菜鸟,但设置为IsModified
的{{1}}必须在false
命令之后才显得很重要。