我有一个类,在DB中有8个道具/ 8列。但在编辑页面上,我不想显示AddedDate或UserID字段,因为我不希望用户更改它。
public class Voucher
{
public int ID { get; set; }
public string Title { get; set; }
public string SiteName { get; set; }
public string DealURL { get; set; }
public DateTime AddedDate { get; set; }
public DateTime? ExpirationDate { get; set; }
public string VoucherFileURL { get; set; }
public Guid UserID { get; set; }
}
以下是编辑控制器的内容:
// POST: /Voucher/Edit/5
[HttpPost]
public ActionResult Edit(Voucher voucher)
{
if (ModelState.IsValid)
{
string[] excludeProperties = { "AddedDate", "UserID" };
UpdateModel(ModelState, "", null, excludeProperties);
db.Entry(voucher).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(voucher);
}
在编辑页面上,一旦我点击提交,我收到以下错误:System.Data.SqlServerCe.SqlCeException:转换为datetime时发生溢出。
似乎AddedDate没有从视图模型中排除并触发错误。
请您告诉我如何修复它?谢谢!
public ActionResult Edit([Bind(Exclude = "AddedDate")]Voucher voucher)
没有运气
答案 0 :(得分:1)
您仍在传递可能包含该字段的凭证。如果您已经在传递Voucher对象,我不确定您在这里使用UpdateModel想要完成什么? 传入凭证,将其设置为已修改并保存。如果你想在数据库中使用什么,那么你必须
你可以简单地使用一个View Model并发布它。
public class Voucher
{
public int ID { get; set; }
public string Title { get; set; }
public string SiteName { get; set; }
public string DealURL { get; set; }
public DateTime? ExpirationDate { get; set; }
public string VoucherFileURL { get; set; }
public Guid UserID { get; set; }
}
然后从db“:
加载对象
var voucher = db.Vouchers.Where(o=>o.ID==voucherViewModel.Id);
//manually copy the fields here then save it
//copy
db.SaveChanges();