2009-01-03 82 views
1

我有一個用於編輯演出的窗體。.net mvc和用表格編輯數據

初始控制器操作稱爲「編輯」。

形式職位,以所謂的「更新」

所以,一旦形式已經發布,我用它使用bindingContext.ModelState.AddModelError來驗證消息添加到的ModelState一個定製ModelBinder的第二控制器動作

更新copntroller動作看起來這樣:

​​

如果ModelBinder的有錯誤的異常將被更新模型被拋出。

這意味着調用RedirectToAction(「Edit」),以便調用原始的「Edit」控制器操作。

這意味着我不會看到我的驗證消息,用戶添加到表單中的任何數據都將重置爲原始值!

我應該如何處理這個問題?

我已經包含下面的「編輯」行動:

[AcceptVerbs("GET")] 
    public ActionResult Edit(Guid id) 
    { 
     Gig gig = GigManager.GetByID(id); 

     SelectList days = CreateDays(1, 31, 1, gig.StartDate.Day); 
     ViewData["day"] = days; 

     SelectList months = CreateMonths(1, 12, 1, gig.StartDate.Month); 
     ViewData["month"] = months; 

     SelectList years = CreateYears(DateTime.Now.Year, DateTime.Now.Year + 10, 1, gig.StartDate.Year); 
     ViewData["year"] = years; 

     string bandNames =""; 
     string bandIds = ""; 
     foreach(Act act in gig.Acts) 
     { 
      bandNames += act.Name.Trim() + ", "; 
      if (act.Artist != null) 
      { 
       bandIds += act.Artist.ID + ";"; 
      } 
     } 

     ViewData["Bands"] = bandNames; 
     ViewData["BandIds"] = bandIds; 

     return View(gig); 

    } 

不過,我不明白個

回答

1

驗證消息,也許這將幫助。我剛剛提交了一個控制器,它可以執行列表/編輯管理員。它在可能方便的類上使用綁定。查看文件的最後部分以查看處理Get和Post Verbs的可能方式。請注意,UpdateModelStateWithViolations只是將錯誤添加到ModelState的幫手。

 Controller.ModelState.AddModelError(violation.PropertyName, 
      violation.ErrorMessage); 

其中顯示有

<%= Html.ValidationSummary() %> 

http://www.codeplex.com/unifico/SourceControl/changeset/view/1629#44699

和查看:http://www.codeplex.com/unifico/SourceControl/changeset/view/1629#54418

[AcceptVerbs("GET")] 
    [Authorize(Roles = "Admin")] 
    public ActionResult EditRole(Guid? RoleID) 
    { 
     Role role = null; 
     RoleForm form = new RoleForm { }; 
     if (RoleID.HasValue) 
     { 
      role = accountService.GetRole(RoleID.Value); 
      if (role == null) 
       return RedirectToAction("Roles"); 

      form = new RoleForm 
      { 
       RoleID = role.ID, 
       RoleName = role.Name, 
       Level = role.Level 
      }; 
     } 
     else 
     { 
      form = new RoleForm(); 
     } 

     ViewData.Model = form; 

     return this.PluginView(); 
    } 


    [AcceptVerbs("POST")] 
    [Authorize(Roles = "Admin")] 
    public ActionResult EditRole(Guid? RoleID, [Bind(Include = "RoleID,RoleName,Level", Prefix = "")] RoleForm form) 
    { 
     Role role = null; 
     if (RoleID.HasValue) 
     { 
      role = accountService.GetRole(RoleID.Value); 
      if (role == null) 
       return RedirectToAction("Roles"); 
     } 

     ServiceResponse<Role> response = accountService.AttemptEdit(form); 

     if (response.Successful) 
     { 
      TempData["Message"] = "Update Successfull"; 
     } 
     else 
     { 
      this.UpdateModelStateWithViolations(response.RuleViolations); 
     } 

     //ViewData["AllRoles"] = accountService.GetRolePage(new PageRequest(0, 50, "Name", typeof(string), true)).Page.ToArray(); 


     ViewData.Model = form; 

     return this.PluginView(); 
    }