2012-03-17 24 views
2

DBに8つの小道具/ 8つの列を持つクラスがあります。しかし、編集ページでは、ユーザーがそれを変更したくないので、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; } 
} 

は、私が編集コントローラ用に持っているものです:System.Data.SqlServerCe.SqlCeException::私は提出をクリックすると、編集ページで

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

、私は次のエラーを得たのオーバーフローが発生しましたdatetimeに変換しています。

AddedDateがビューモデルから除外されず、エラーが発生したようです。

修正方法をお知らせください。ありがとう!

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

運のいずれか

答えて

1

あなたはまだそれにそのフィールドが含まれている可能性が引換券を渡しています。すでにVoucherオブジェクトを渡している場合は、ここで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; } 
} 
 

とDBから、あなたのオブジェクトをロード」:

 

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

私はSTHを誤解だと思う私は、バウチャーオブジェクトがにModelStateと同じであり、両者は8つの性質を持っていると思ったので、私は。。 –

+0

モデルステートメントの状態がモデルステートでない場合は、ステートはありません。バウチャーMVCを受け取り、検証の結果をmodelstateに出力するまでに、モデルステートには2つのプロパティが除外されます。 updateModelは、ポストされた値やURLの値で 'モデルオブジェクトを更新する'場合に使用されます。これらのプロパティを持つvoucherという名前のオブジェクトが既に与えられています。 –

+0

ユーザーがバウチャーを編集するとき、私は追加された日付またはユーザーIDを表示または変更することを許可しません。したがって、Edit Controllerに渡されたVoucher Objectには必ず、addedDateまたはUserIDの値は含まれません。バウチャーオブジェクトがdbに保存されると、エラーが発生します。それに対する解決策はありますか?あなたが理解して欲しいです。ありがとう。 –

関連する問題