2012-03-17 38 views
2

我有一個類,其中有8個道具/ 8列在DB中。但在編輯頁面上,我不想顯示AddedDate或UserID字段,因爲我不希望用戶更改它。asp.net mvc3 UpdateModel排除屬性不起作用

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:出現溢出同時轉換爲日期時間。

似乎像AddedDate沒有從視圖模型中排除並觸發錯誤。

請你讓我知道如何解決它?謝謝!

public ActionResult Edit([Bind(Exclude = "AddedDate")]Voucher voucher) 

沒有運氣,要麼

回答

1

你還是傳遞憑證其中可能包含在它的那場。如果您已經傳入了憑證對象,我不確定您在這裏使用UpdateModel來完成什麼? 通過憑證,將其設置爲已修改並保存。如果你想在數據庫什麼用,那麼你就必須

  1. 加載對象從數據庫
  2. 的UpdateModel和排除性能
  3. 保存實體。

您可以簡單地使用視圖模型併發布。

 

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; } 
} 
 

,然後加載從數據庫「你的對象:

 

var voucher = db.Vouchers.Where(o=>o.ID==voucherViewModel.Id); 
//manually copy the fields here then save it 
//copy 
db.SaveChanges(); 
 
+0

我想我誤會了......我以爲憑證對象是相同的ModelState,它們都具有8次性,所以我。想要在保存憑證時排除ModelState中的兩個屬性 – 2012-03-17 04:47:34

+0

如果驗證您的模型,那麼沒有modelstate狀態當您收到憑證MVC已驗證它並將驗證結果輸出到modelstate中時您不會將它傳遞迴updatemodel UpdateModel用於當你想用發佈的或URL值更新一些模型對象在這種情況下你已經被賦予了這個名爲憑證的對象,其中包含這些屬性。 – 2012-03-17 04:53:27

+0

當用戶編輯優惠券時,我不允許他們查看或更改addedDate或UserID。所以傳入Edit控件的Voucher對象肯定不會包含addedDate或UserID的值。所以當憑證對象保存到數據庫時,會觸發錯誤。任何解決方案?希望你能理解。謝謝。 – 2012-03-17 05:05:10