C# 如果新提交的值为空,则取消更新记录中的单个字段
我有一个“Manager”类的简单模型/控制器设置(在ASP.NET MVC中),该类包含有关客户端的信息,包括密码字段。我希望Manager记录的编辑表单仅在输入新密码时更新密码字段,而不是使用一个单独的控制器/视图来更新密码。(假设编辑经理记录的是管理员类型的用户) 在下面的代码中,我取出了其他字段的属性以节省空间C# 如果新提交的值为空,则取消更新记录中的单个字段,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个“Manager”类的简单模型/控制器设置(在ASP.NET MVC中),该类包含有关客户端的信息,包括密码字段。我希望Manager记录的编辑表单仅在输入新密码时更新密码字段,而不是使用一个单独的控制器/视图来更新密码。(假设编辑经理记录的是管理员类型的用户) 在下面的代码中,我取出了其他字段的属性以节省空间 public class Manager { public int ManagerID { get; set; } public string ManagerNa
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视图和ManagerController都具有默认生成的代码。编辑方法定义为:
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();
}
公共异步任务编辑(int-id,[Bind”(“ManagerID,ManagerName,Phone1,
电话2、电子邮件、组织名称、组织类型、备注、活动、密码“)]
经理(经理)
{
.
.
.
_更新(经理);
wait_context.SaveChangesAsync();
}
因此,在这一点上,如果我将密码留空,它当然会用空值更新记录。我需要做两件事:1。检查以确保密码值不为空,然后单击2。如果不为null,则允许其更新,否则将停止更新表中的密码值,但随后允许更新其余字段
如您所见,密码字段是绑定的。我想知道我是否需要手动绑定它,或者在它为null时取消绑定它,或者类定义中是否有帮助的东西?…我只是不知道。尝试使用一个好的ol'backing字段。当不涉及逻辑时,自动属性很好,但在这种情况下,我认为在更新字段之前,只需简单检查传递的值是否为null即可:
private string password;
[DataType(DataType.Password)]
[Display(Name = "Update Password")]
public string Password
{
get
{
return password;
}
set
{
if (!string.IsNullOrEmpty(value))
{
password = value;
}
}
}
我发现了另一个类似的问题,并从中得出了答案: 要处理的财产太多了!(我习惯了低级语言)。在调用保存数据之前,如果密码为null,请将密码字段的IsModified属性设置为false。则不会更新数据库中的字段:
_context.Update(manager);
if (manager.Password == null)
{
_context.Entry(manager).Property(x => x.Password).IsModified = false;
}
await _context.SaveChangesAsync();
我只是这里的一个noob,但是将
修改为false
必须在\u context.Update(manager)之后,这似乎很重要代码>命令。单独进行更改似乎无法解决问题……是否还有其他地方需要更改?在某些地方我必须将“密码”更改为“密码”吗?我编辑了一条经理记录,将密码留空,它仍然将其更新为null。它是否仍然使用null
值进行更新?可能是一个空字符串,而不是null
。我更新了答案。这可以用于更新类的实例(我认为),但不能避免将空值保存到数据库表中。你的回答确实帮助我想出了该怎么办。我已经发布了我的解决方案。很高兴知道你解决了它!我对EntityFramework
几乎一无所知:我是NHibernate
人=顺便说一句,你可以(也应该,在这种情况下)接受你自己的答案。