我遇到了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" />
}