asp.net-mvc如何从实体框架检索现有上下文值在控制器中的?

发布时间: 2017/3/25 11:19:15
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

这样我做这一刻 (的作品) 感觉有点变态。当我编辑我不希望用户更改背后的关键审计字段的实体时,例如实体最初创建时它会自动填充 DateAdded、 AddedBy、 EditedBy。

要停止编辑这些值的人我不将它们绑定在包括编辑时︰

public ActionResult Edit([Bind(Include = "Id,AccountName")] Account account)

这意味着我必须这样做以获取原始值收回去,要不然他们获取或设置为 null

account.DateAdded = db.Accounts.Where(c => c.Id == account.Id).Select(d => d.DateAdded).FirstOrDefault();
account.AddedBy = db.Accounts.Where(c => c.Id == account.Id).Select(a => a.AddedBy).FirstOrDefault();
account.EditedBy = User.Identity.Name;

有没有更好的方式来解决这,以下作品的方式,但并不感到有效。

解决方法 1:

推荐方法是使用一个视图模型包含只需要显示/编辑说地产

public class AccountVM
{
  public int ID { get; set; }
  public string Name { get; set; }
}

然后然后使用视图中和后回到您的控制器,得到的数据模型,基于 ID 属性和地图查看模型属性到你的数据模型和保存。注意 [Bind] 属性不是必需。

使用视图模型拥有众多优点,包括应用程序的视图的特定属性和预防的 overposting 攻击。详细信息请参阅的答案在 MVC 中的视图模型是什么?

Automapper这样的工具很容易地映射您的数据和视图模型之间的 ata。

官方微信
官方QQ群
31647020