2016-12-28 102 views
-1

我正在创建一个MVC应用程序。我在控制器打开一看是这样的:MVC视图错误验证

return RedirectToAction("AddGroupsQty", "Account", new { qty = model.qty, id = id }); 

的AddGroupsQty控制器看起来是这样的:

public ActionResult AddGroupsQty(int qty, int id) 
     { 

      var model = new AddGroupsQtyViewModel(); 
      model.subject_id = id; 
      model.qty = qty; 
      ClassDeclarationsDBEntities1 entities1=new ClassDeclarationsDBEntities1(); 
      var subj = entities1.Subjects 
        .Where(b => b.class_id == model.subject_id) 
        .FirstOrDefault(); 
      model.subject_name = subj.name; 
      if (ModelState.IsValid) 
      { 
       int maxId = 0; 
       int total = 0; 
       total = entities1.Groups.Count(); 
       if (total == 0) 
       { 
        maxId = 0; 
       } 
       else 
       { 
        maxId = entities1.Groups.Max(u => u.group_id); 
       } 
       for (int i = 0; i < qty; i++) 
       { 
        var teacher = entities1.Users 
        .Where(b => b.email.Replace(" ", String.Empty) == model.teacher_emails[i].Replace(" ", String.Empty)) 
        .FirstOrDefault(); 
        var group=new Models.Group(id, maxId+1, model.group_names[i], teacher.user_id); 
       } 
       return RedirectToAction("OperationSuccess", "Account"); 
      } 
      return View(model); 
     } 

视图模型:

public class AddGroupsQtyViewModel 
    { 
     public int qty { get; set; } 
     public int subject_id { get; set; } 
     public string subject_name { get; set; } 
     [Required] 
     [Display(Name = "Name of group")] 
     public List<string> group_names { get; set; } 
     [Required] 
     [Display(Name = "Email of teacher")] 
     [RegularExpression(@"^[a-zA-Z0-9._%+-]+(@student.mini.pw.edu.pl|@mini.pw.edu.pl)$", ErrorMessage = "Registration limited to university domain email.")] 
     public List<string> teacher_emails { get; set; } 
    } 

而问题是,每当观点称为,窗口中窗体的验证始终为Valid。视图看起来是这样的:

@using System.IdentityModel.Configuration 
@using System.Web.UI.WebControls 
@model ClassDeclarationsThsesis.Models.AddGroupsQtyViewModel 

@{ 
    ViewBag.Title = "AddGroupsQty"; 
} 

<h2>Add Groups to @Model.subject_name</h2> 
@if (Model != null) 
{ 
    using (Html.BeginForm("AddGroupsQty", "Account", new { qty = Model.qty, Model.subject_id }, FormMethod.Post, new { @class = "form-horizontal", role = "form", })) 
    { 
      @Html.AntiForgeryToken() 
      <h4>Insert data</h4> 
      <hr /> 
      <table> 
       <tr> 
        <th> 
         @Html.ValidationSummary("", new { @class = "text-danger" }) 
         <div class="form-group"> 
          @Html.LabelFor(m => m.group_names, new { @class = "col-md-2 control-label" }) 
         </div> 
        </th> 
        <th> 
         @Html.ValidationSummary("", new { @class = "text-danger" }) 
         <div class="form-group"> 
          @Html.LabelFor(m => m.teacher_emails, new { @class = "col-md-2 control-label" }) 
         </div> 
        </th> 
       </tr> 

       @for (int i = 0; i < Model.qty; i++) 
       { 
        <tr> 
         <th> 
          <div class="form-group"> 
           <div class="col-md-10"> 

            @Html.TextBoxFor(m => m.group_names[i], new { @class = "form-control" }) 
           </div> 
          </div> 
          </th> 
         <th> 
          <div class="form-group"> 
           <div class="col-md-10"> 

            @Html.TextBoxFor(m => m.teacher_emails[i], new { @class = "form-control" }) 
           </div> 
          </div> 
         </th> 
        </tr> 
       } 
      </table> 
      <div class="form-group"> 
       <div class="col-md-offset-2 col-md-10"> 
        <input type="submit" class="btn btn-default" value="Submit" /> 
       </div> 
      </div> 
        } 
         } 

我不知道什么是错的这一段代码,但只要我打开这个窗口,它马上有效,然后在控制器出现错误,因为它进入IF ,但它应该首先验证表单。

+1

阴毛的ActionResult AddGroupsQty(AddGroupsQtyViewModel值)尝试这样 –

+0

好吧,这工作,谢谢!但是,现在填写表单并提交后,我的名单teacher_emails和group_names都为空。为什么? @BalajiM –

回答

0

验证基于模型联编程序执行。所以在控制器动作应该是视图模型作为参数。

Pubic ActionResult AddGroupsQty(AddGroupsQtyViewModel value) 
+0

当您发布表单并希望进行模型验证时,必须将适当的视图模型作为@Balaji指定的操作方法参数传递。尝试使用此方法并在您的代码中进行相关更改。 –