asp.net mvc3 UpdateModel排除属性不起作用

时间:2012-03-17 04:10:17

标签: asp.net-mvc-3

我有一个类,在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)

没有运气

1 个答案:

答案 0 :(得分:1)

您仍在传递可能包含该字段的凭证。如果您已经在传递Voucher对象,我不确定您在这里使用UpdateModel想要完成什么? 传入凭证,将其设置为已修改并保存。如果你想在数据库中使用什么,那么你必须

  1. 从数据库加载对象
  2. UpdateModel并排除属性
  3. 保存您的实体。
  4. 你可以简单地使用一个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();