【发布时间】:2016-01-04 02:26:28
【问题描述】:
我目前有一个视图,我将视图模型列表传递给。然后我想选择其中一个 ViewModel 并将其发布回我的控制器。我目前有一个 foreach 循环遍历每个 ViewModel 并显示它们的数据。每个 ViewModel 都有一个提交按钮,但它似乎没有像我希望的那样工作。
解释的代码(查看):
@model IEnumerable<RoboticsScheduler.Models.UserVM>
...
@using (Html.BeginForm("UserApproved", "Approve"))
{
...
@foreach (var item in Model)
{
...
@*Modified model data*@
...
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Approve User" class="btn btn-default" />
</div>
</div>
}
}
然后在我的接受控制器中,我将 UserVM 作为参数,但我不断在控制器中获得空的 UserVM。
控制器中的代码:
public async Tas<ActionResult> UserApproved(UserVM uvm)
{
...
}
如果有人对我如何完成这样的事情有建议,那就太好了!
编辑
显示更深入的视图并将 BeginForm 移动到循环中:
...
@foreach (var item in Model)
{
using (Html.BeginForm("Index", "Approved", FormMethod.Post))
{
<tr>
<td>
@Html.HiddenFor(modelItem => item.Id)
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@item.EmailConfirmed.ToString()
</td>
<td>
<span class="col-md-10">
@{List<string> roles = ViewBag.Roles;
int i = 0;
}
@foreach (string role in roles)
{
@Html.EditorFor(modelItem => item.Roles[i])
@Html.Label(role, new { @class = "control-label" })
<br />
}
</span>
</td>
<td>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Approve User" class="btn btn-default" />
</div>
</div>
</td>
</tr>
}
}
【问题讨论】:
-
您需要显示视图 - 您如何为每个
UserVM生成控件?如果它没有约束它是因为你的观点是错误的 -
视图不好。除非您在没有任何 html 帮助程序的情况下手动创建了 html,否则
foreach循环不可能生成正确的name属性。您需要显示视图。 -
@Jon,唯一重要的部分是你如何生成控件(模型的一两个属性只需要查看它们)
-
是的,但答案取决于您在这里真正想做什么。您在一个表单中为集合中的每个项目生成控件,这表明您实际上想要回发整个集合。对吗?
-
没什么区别 - 查看为隐藏输入和单选按钮生成的 html。它们的名称属性与您的模型无关,因此在您发布时永远不会绑定到您的模型。
标签: c# asp.net-mvc razor viewmodel model-binding