dav*_*avy 3 ajax asp.net-mvc asp.net-ajax asp.net-mvc-4
对不起这里的代码量,但这是解释发生的事情的最佳方式.
我在MVC 4局部视图中给出了这段代码:
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
@using (Ajax.BeginForm("TestPost", new AjaxOptions { HttpMethod = "Post" }))
{
foreach (var d in Model.DataItemsWithLabels)
{
@Html.LabelFor(m => d.DataName)
@Html.TextBoxFor(m => d.DataValue);
}
<input type="submit" value="Save" />
}
Run Code Online (Sandbox Code Playgroud)
我的控制器动作如下:
public ActionResult TestPost(CmaPartialModel model)
{
return PartialView("Transaction", model);
}
Run Code Online (Sandbox Code Playgroud)
在我的模型中,我有一些代码填充了一个对象列表(只有它们是空的),定义为:
public List<DataItemWithLabel> DataItemsWithLabels { get; set; }
public class DataItemWithLabel
{
public string DisplayName { get; set; }
public string DataName { get; set; }
[Required]
public string DataValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我还有什么认为正确的web.config条目:
我在这里和其他地方阅读过大量帖子但没有成功.
代码会发布到TestPost方法,但模型始终为空.有人可以告诉我为什么会这样吗?
总是获得null价值的原因是模型绑定器不知道如何绑定对象列表.见下面的例子:
public class CmaPartialModel
{
public List<DataItemWithLabel> DataItemsWithLabels { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后在你查看中使用它:
@model CmaPartialModel
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
@using (Ajax.BeginForm("TestPost", new AjaxOptions { HttpMethod = "Post" }))
{
for(var i = 0; i < Model.DataItemsWithLabels.Count; i++)
{
@Html.LabelFor(m => m.DataItemsWithLabels[i].DataName)
@Html.TextBoxFor(m => m.DataItemsWithLabels[i].DataValue)
}
<input type="submit" value="Save" />
}
Run Code Online (Sandbox Code Playgroud)
最后,您的操作方法应如下所示:
public ActionResult TestPost(CmaPartialModel model)
{
return PartialView("Transaction", model);
}
Run Code Online (Sandbox Code Playgroud)
更新
你也可以foreach在你的视图中使用如下:
foreach (var item in Model.DataItemsWithLabels.Select((value, i) => new { i, value }))
{
@Html.LabelFor(m => m.DataItemsWithLabels[@item.i].DataName)
@Html.TextBoxFor(m => m.DataItemsWithLabels[@item.i].DataValue);
}
Run Code Online (Sandbox Code Playgroud)