2016-12-29 64 views
0

我正在创建一个MVC应用程序。我有一个表单来填充视图,但看起来控制器没有得到输入的数据(调试时它是空的)。
我的控制器:MVC动态数据传递给控制器​​

public ActionResult AddGroupsQty(AddGroupsQtyViewModel value) 
{ 

    var model = new AddGroupsQtyViewModel(); 
    model.subject_id = value.subject_id; 
    model.qty = value.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 < value.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(value.subject_id, maxId+1, model.group_names[i], teacher.user_id); 
      entities1.Groups.Add(group); 
      entities1.SaveChangesAsync(); 
     } 
     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")] 
    public List<string> teacher_emails { get; set; } 
} 

和查看:

@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> 
        } 
         } 

的问题是,在运行应用程序时,填写表格并按下提交该按钮,它在控制器中抛出一个空的异常,它们都列出:

列表teacher_emails

和:

列表GROUP_NAMES

为空。我的表单中没有看到任何错误。我该如何解决它?

回答

2

model.teacher_emails和model.group_names始终为空,因为模型是新的。

var model = new AddGroupsQtyViewModel(); 

尝试使用value.teacher_emailsvalue.group_names来代替。

也整理了代码。变量声明之后的空白行,你自己就会发现它。

相关问题