Phi*_*lla 2 asp.net-mvc razor entity-framework-5
我设法使用asp.net MVC创建基本的CRUD操作
但是我的领域有问题Status,CreatedOn而且CreatedBy.
我希望在创建操作期间填充这些字段,并且在编辑操作期间不会更新这些字段,但我不想对这些字段使用@HiddenFor,因为您可以编辑DOM并在POST请求之前仍然更新这些信息.
基本上我想要的是使用POST请求中发送的任何数据来修补我的模型.因此,我不必担心编辑操作中正在更改我不想修改的字段.
这是我的模型和动作的代码.
模型
[Table("Account")]
public class Account
{
#region Properties
[Key]
public int AccountID { get; set; }
[Required]
[StringLength(50)]
[DisplayName("Account Name")]
public string Name { get; set; }
[Required]
[DisplayName("Time Offset")]
[Range(-24,24)]
public decimal TimeOffset { get; set; }
[StringLength(20)]
[DisplayName("Status")]
public string Status { get; set; }
public DateTime CreatedOn { get; set; }
public int CreatedBy { get; set; }
public DateTime? ModifiedOn { get; set; }
public int ModifiedBy { get; set; }
#endregion
}
public class DbAccount : DbContext
{
public DbSet<Account> Accounts { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器动作创建
[HttpPost]
public ActionResult Create(Account account)
{
if (ModelState.IsValid)
{
account.Status = "ENABLED";
account.CreatedOn = DateTime.Now;
account.CreatedBy = 1;
db.Accounts.Add(account);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(account);
}
Run Code Online (Sandbox Code Playgroud)
编辑控制器操作
[HttpPost]
public ActionResult Edit(Account account)
{
if (ModelState.IsValid)
{
account.ModifiedOn = DateTime.Now;
account.ModifiedBy = 1;
db.Entry(account).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(account);
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能修改模型没有明确影响某些特定属性CreatedOn和CreatedBy,我想这些属性保留编辑操作过程中的原始值.我不想使用隐藏字段来存储它们.使用我现有的解决方案,我使用了隐藏字段,但它可以在POST请求之前在DOM中进行修改,因此它不安全.
db.Entry(account).State = EntityState.Modified将模型附加到上下文,所有属性都标记为已修改.尝试将其添加到未更改状态,并将可修改的字段设置为已修改.
[HttpPost]
public ActionResult Edit(Account account)
{
if (ModelState.IsValid)
{
db.Accounts.Attach(account);
db.Entry(account).Property(a => a.Name).IsModified = true;
db.Entry(account).Property(a => a.TimeOffset).IsModified = true;
db.Entry(account).Property(a => a.Status).IsModified = true;
account.ModifiedOn = DateTime.Now;
account.ModifiedBy = 1;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(account);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2281 次 |
| 最近记录: |