2012-03-17 2 views
2

DB에 8 개의 소품/8 개의 열을 가진 클래스가 있습니다. 하지만 편집 페이지에서 사용자가 변경하려고하지 않기 때문에 AddDate 또는 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을 사용하여 수행하려는 작업이 무엇인지 잘 모르겠습니다. 바우처를 전달하고 수정하도록 설정하고 저장하십시오. 데이터베이스에 뭐죠 사용하고자하는 경우에 당신은 데이터베이스

  • UpdateModel에서

    1. 로드 객체에있는 당신의 실체를 저장 특성
    2. 을 제외 할 수 있습니다.

    단순히보기 모델을 사용하여 게시 할 수 있습니다. 다음

     
    
    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를 오해 생각 나는 그들이 모두 8 개 특성을 가지고, 바우처 객체가 ModelState과 동일합니다 생각 그래서 난.. 바우처가 저장 될 때 ModelState에서 2 개의 속성을 제외하고자했습니다 –

    +0

    모델의 유효성을 검사하는 경우 modelstate는 상태가 아닙니다. 바우처를받을 때까지 MVC는 유효성을 검사하고 유효성 검사 결과를 modelstate로 보냅니다. UpdateModel은 게시 된 또는 URL 값으로 '일부 모델 객체를 업데이트'할 때 사용됩니다.이 경우 UpdateModel은 updatemodel에 전달됩니다. 당신은 이미이 속성들을 가진 바우처라는 객체를 이미 받았습니다. –

    +0

    사용자가 바우처를 편집 할 때 추가 된 사용자 ID 또는 사용자 ID를 보거나 변경할 수 없습니다. 따라서 Edit 컨트롤러로 전달 된 Voucher Object는 반드시 addedDate 또는 UserID에 대한 값을 포함하지 않습니다. 바우처 객체가 db에 저장되면 오류가 발생합니다. 그것을위한 어떤 해결책? 당신이 이해하기를 바랍니다. 감사. –

    관련 문제