C# 如果新提交的值为空,则取消更新记录中的单个字段

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

我有一个“Manager”类的简单模型/控制器设置(在ASP.NET MVC中),该类包含有关客户端的信息,包括密码字段。我希望Manager记录的编辑表单仅在输入新密码时更新密码字段,而不是使用一个单独的控制器/视图来更新密码。(假设编辑经理记录的是管理员类型的用户)

在下面的代码中,我取出了其他字段的属性以节省空间

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
人=顺便说一句,你可以(也应该,在这种情况下)接受你自己的答案。