asp.net-mvc – ASP.NET MVC,将Model从View传递给Controller

我遇到了ASP.NET MVC的问题,并将数据从View传递到Controller.我有这样的模型:

 public class InputModel {
   public List<Process> axProc { get; set; }

   public string ToJson() {
     return new JavaScriptSerializer().Serialize(this);
   }
 }

 public class Process {
   public string name { get; set; }
   public string value { get; set; }
 }

我在Controller中创建了这个InputModel并将其传递给View:

public ActionResult Input() {
  if (Session["InputModel"] == null)
    Session["InputModel"] = loadInputModel();
  return View(Session["InputModel"]);
}

在我的Input.cshtml文件中,我有一些代码来生成输入表单:

@model PROJ.Models.InputModel

@using(Html.BeginForm()) {
  foreach(PROJ.Models.Process p in Model.axProc){
    <input type="text" />
    @* @Html.TextBoxFor(?? => p.value) *@
  }
  <input type="submit" value="SEND" />
}

现在,当我单击提交按钮时,我想处理放入文本字​​段的数据.

问题1:我看过这个@ Html.TextBoxFor(),但我真的没有得到这个“stuff => otherstuff”.我得出结论,“otherstuff”应该是我想要写入数据的字段,在这种情况下它可能是“p.value”.但是箭头前面的“东西”是什么?

回到控制器我然后有一个函数用于POST一些调试:

[HttpPost]
public ActionResult Input(InputModel m) {
  DEBUG(m.ToJson());
  DEBUG("COUNT: " + m.axProc.Count);

  return View(m);
}

这里Debug只显示如下内容:

{"axProc":[]}
COUNT: 0

所以我得到的返回模型是空的.

问题2:我是否在使用@using(Html.BeginForm())做了一些根本性的错误?这不是正确的选择吗?如果是这样,我如何让我的模型充满数据回到控制器?
(我不能在这里使用“@model List< Process>”(因为上面的例子是缩写的,在实际的代码中会有更多的东西).)

我希望有人可以填写我正在忽略的一些细节.

最佳答案 将您的视图更改为此类内容以正确绑定表单提交上的列表.

@using(Html.BeginForm()) {
  for(int i=0;i<Model.axProc.Count;i++){
   <span>
    @Html.TextBoxFor(model => model.axProc[i].value)
</span>
  }
  <input type="submit" value="SEND" />
}
点赞