2012-01-29 77 views
0

我需要一些幫助,這一個....MVC3編輯在索引視圖

我有這個簡單的模型:

public class Candidat 
{ 

    public string LoginEmail { get; set; } 

    [Required] 
    [DataType(DataType.Text)] 
    [Display(Name = "Prénom")] 
    public string FirstName { get; set; } 

    [Required] 
    [DataType(DataType.Text)] 
    [Display(Name = "Nom")] 
    public string LastName { get; set; } 
} 

我也有一個這樣的控制器:

 [Authorize] 
    public ActionResult Index(Candidat model) 
    { 
     if (model.LoginEmail == null) 
     { 
      model = null; 
      using (var db = new rhDB()) 
      { 
       MembershipUser user = Membership.GetUser(); 
       if (user != null) 
       { 
        model = (from m in db.Candidates where m.LoginEmail == user.Email select m).SingleOrDefault(); 
       } 

       if (model == null) 
       { 
        model = new Candidat(); 
        model.LoginEmail = user.Email; 
        model.Email = user.Email; 
       } 

      } 
     } 

     return View("MyProfileCandidate", model); 
    } 

如您所見,我檢查用戶是否是數據庫中的現有記錄。如果不是,我創建一個模型的新實例並設置一些默認值...然後,我將它傳遞給EditView。

的問題是,我的觀點顯示與錯誤的驗證消息...對於所有必填字段...

當然,這是因爲這些字段是空的,需要的...這似乎是視圖認爲我發佈了一個無效的模型......有沒有辦法隱藏這些驗證信息?

回答

0

嘗試清除模型的狀態,如果你打算修改某些值在POST操作模型:

[Authorize] 
public ActionResult Index(Candidat model) 
{ 
    if (model.LoginEmail == null) 
    { 
     model = null; 
     using (var db = new rhDB()) 
     { 
      MembershipUser user = Membership.GetUser(); 
      if (user != null) 
      { 
       ModelState.Clear(); 
       model = (from m in db.Candidates where m.LoginEmail == user.Email select m).SingleOrDefault(); 
      } 

      if (model == null) 
      { 
       ModelState.Clear(); 
       model = new Candidat(); 
       model.LoginEmail = user.Email; 
       model.Email = user.Email; 
      } 

     } 
    } 

    return View("MyProfileCandidate", model); 
} 

這樣做的原因是,HTML助手將使用最初發布的模型狀態值而不是模型中的那些。您還可以清除模型狀態下的單個字段:ModelState.Remove("FirstName");