Sim*_*mon 4 c# asp.net asp.net-mvc
我正在努力找出在MVC中做某事的正确方法,这在WebForms中并不困难,我希望有人能够指出我正确的方向.
基本上,我正在显示数据表,用户应该能够选择零行或多行.当他们按下提交时,我希望我的控制器知道哪些行已被选中,因为这将影响屏幕上的其他数据.
我的视图如下所示:
<form action="/Summary/Index" method="post">
<table>
<thead>
<tr>
<th></th>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody>
<% foreach (Person p in Model)
{ %>
<tr>
<td>
<input type="checkbox" name="" /> <!-- HOW SHOULD THIS BE RENDERED? -->
</td>
<td><%= p.Name %></td>
<td><%= p.Age %></td>
</tr>
<% } %>
</tbody>
</table>
<input type="submit" value="Update" />
</form>
Run Code Online (Sandbox Code Playgroud)
因此,当单击提交按钮时,表单将发布到当前URL.请注意,模型"Person"只是一个ViewModel,因此我可以根据需要添加任何必要的UI相关属性.我应该向Person添加一个'Selected'属性并让我的控制器获取Person的列表/数组并检查每个属性的选定属性吗?
请注意,我需要一个无需JavaScript的解决方案,我不希望我的控制器关注如何检索复选框的值 - 如果需要,我很乐意编写自定义的ModelBinder.
任何人都可以告诉我如何做到这一点吗?
非常感谢,西蒙.
Laz*_*rus 11
如果有人员ID或其他唯一标识符,则由此构建它:
<% foreach (Person p in Model)
{ %>
<tr>
<td>
<input type="checkbox" name="selectedNames" value="<%= p.ID %>" /> <!-- HOW SHOULD THIS BE RENDERED? -->
</td>
<td><%= p.Name %></td>
<td><%= p.Age %></td>
</tr>
<% } %>
Run Code Online (Sandbox Code Playgroud)
然后,您可以将返回值添加到控制器方法"string [] selectedNames",即
public void ProcessReturn(string[] selectedNames)
{
foreach (string nameID in selectedNames)
{
ProcessNameByID(nameID);
}
}
Run Code Online (Sandbox Code Playgroud)
该数组将包含已选中的每个复选框的"值",并且仅包括已检查的复选框!
| 归档时间: |
|
| 查看次数: |
9415 次 |
| 最近记录: |