我有这个在我的控制器:视图模型不回发
public ActionResult Index()
{
var viewModels = _dataSyncService.Get().Select(provider => new IndexViewModel
{
Selected = false, Provider = provider
}).ToList();
return View(viewModels);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(IEnumerable<IndexViewModel> viewModels)
{
//Breakpoint on this to check viewModels
}
视图模型:
public class IndexViewModel
{
public bool Selected { get; set; }
public IDataSyncProvider Provider { get; set; }
}
而且我Index.cshtml:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<button type="submit" class="btn blue">Trigger Selected</button>
@foreach (var sync in Model)
{
<tr>
<td>
@Html.CheckBoxFor(s => sync.Selected)
</td>
<td>@sync.Provider.FriendlyName</td>
</tr>
}
}
但我的模型贴后背, viewModels
总是返回为空。我读了很多关于必须分配Id的复选框等,但我认为这就是Html.CheckBoxFor
是。
我敢肯定,我会在某个时候自我点亮,但我可以做一些指导。
啊,我见过的例子是这样做的,但我认为那只是他们的偏好。我会放弃它。 – webnoob
这不是一个偏好。如果要绑定到集合,输入名称必须遵循链接文章中离散的方案。如果你在里面使用数组索引器,助手只会生成这个名字。所以如果你维护一个单独的索引并在助手中使用索引器,那么你仍然可以使用'foreach',但在这种情况下'foreach'不会给你买任何东西,所以用一个简单的for循环更容易。 – nemesv
非常好,现在已经对回发进行了排序(即在打勾并回发时Selected = true),但是我的ViewModel的'Provider'部分没有回传。你知道为什么吗?我试过添加@ Html.HiddenFor(m => Model [i] .Provider)',但这似乎没有帮助。我已经检查了视图模型,当它被分配到视图,它被发送好了。 – webnoob