我在MVC应用程序中遇到了一点错误。
管理员可以编辑用户个人资料。包括用户所在的角色。
所以我有一个用于“EditUser”的ViewModel:
public class EditUserViewModel
{
public User User { get; set; }
public IEnumerable<SelectListItem> PossibleRoles { get; set; }
public int[] SelectedRoles { get; set; }
}
因此,在我的EditUser.cshtml页面上,我只运行一个@ Html.EditorFor(Model =&gt; model.User),根据我的MetaData类的限制生成所需的字段。
在那里,例如我做了这样的注释:
[ScaffoldColumn(false)]
public string Password { get; set; }
这个问题是,当我回发我的编辑表单时,设置为Scaffold false的值为null。这似乎是合乎逻辑的,因为这些属性没有编辑框。
因此,当我保存我的实体时,它会用null覆盖值值。 (例如,如果我更新用户的名字并保存,则用null覆盖用户的密码,EF会抛出错误) 有没有什么方法可以自动更新值(根据我能够编辑的值(MetaDataClasses)?)?否则,如果我将它们复制到实体框架中新获取的实体,并且我应该将注释更改为Scaffold(false),我需要在代码中添加一条规则,将新值复制到实体中。这似乎不对。
提前致谢。
答案 0 :(得分:2)
EF适用于整个实体,如果您决定不显示实体的某些部分,您还必须在保存更改时处理此问题。您有多种选择:
答案 1 :(得分:0)
您还可以使用隐藏的输入。不知道为密码做这件事是不是一个好主意。
@Html.HiddenFor(model => model.Property)