MVC动作不会在控制器中触发

时间:2015-05-21 01:43:04

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

我在视图中创建了一个模型,一些字段和一个按钮:

查看:

@model IEnumerable<EnrollSys.Employee>
 @foreach (var item in Model)
    {
      @Html.TextBoxFor(modelItem => modelItem.name)
    }
<input type="submit" value="Save" class="btn btn-default" style="width: 20%" />

控制器:

   public ActionResult Index()
        {
            var model = selectModels();
            return View(model);
        }

        [HttpPost]
        public ActionResult Save(IEnumerable<EnrollSys.Employee> model)
        {
            return View();
        }

问题是:

为什么&#34;保存&#34;行动没有被解雇?

1 个答案:

答案 0 :(得分:3)

您需要<form>元素来回发您的控件。在您的情况下,您需要指定操作名称,因为它与生成视图的方法(Index()

不同
@using (Html.BeginForm("Save"))
{
   .... // your controls and submit button
}

现在这将回发到您的Save()方法,但是模型将为null,因为您的foreach循环正在生成重复的name属性而没有索引器意味着它们无法绑定到集合(由于重复的id属性,它也会创建无效的html)。

您需要使用for循环(模型必须实施IList)或EditorTemplate类型的自定义Employee

使用for循环

@model IList<EnrollSys.Employee>
@using (Html.BeginForm("Save"))
{
  for (int i = 0; i < Model.Count; i++)
  {
    @Html.TextBoxFor(m => m[i].name)
  }
  <input type="submit" value="Save" class="btn btn-default" style="width: 20%" />
}

使用EditorTemplate

/Views/Shared/EditorTemplates/Employee.cshtml

@model EnrollSys.Employee
@Html.TextBoxFor(m => m.name)

并在主视图中

@model IEnumerable<EnrollSys.Employee> // can be IEnumerable
@using (Html.BeginForm("Save"))
{
  @Html.EditorFor(m => m)
  <input type="submit" value="Save" class="btn btn-default" style="width: 20%" />
}