MVC动态数据传递给控制器

时间:2016-12-29 16:31:07

标签: c# .net asp.net-mvc asp.net-mvc-4

我正在创建一个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

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

1 个答案:

答案 0 :(得分:2)

model.teacher_emails和model.group_names始终为null,因为model是新的。

 var model = new AddGroupsQtyViewModel();

请尝试使用value.teacher_emailsvalue.group_names

同样整理代码。变量声明后的空白行,您自己会发现它。