【发布时间】:2015-07-23 20:12:58
【问题描述】:
我有一个包含模型项目列表的视图。我需要为每一行添加一个复选框,让用户选择多个复选框,并将选择的行的一些标识符传递给控制器。我知道如何通过操作链接传递单个值,但我不确定如何通过操作链接传递多个值或如何“收集”选择了哪些行。我将在下面展示我的一些代码尝试。有人可以帮我弄清楚为什么我无法获取传递给控制器的所有复选框的值吗?
这是我的页面
Checkbox App ID Date Name
[] 1 5/10 Bob
[] 2 5/10 Ted
[] 3 5/11 Alice
我需要用户做的是选择第 1 行和第 3 行(例如)并将这些 App ID 传递给控制器。
我开始列出各种尝试,但决定只展示我当前的尝试,看看是否有人能指出我做错了什么。我看到的在线示例和我的示例之间的主要区别是我使用 PagedList 并在 foreach 循环中创建表的行。
当它到达控制器时,参数 ints 是空白的。如何从复选框中获取值?我使用此站点的基本思想是,将所有复选框命名为相同并通过操作链接传递 ICollection: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/
查看:
@model PagedList.IPagedList<CarmelFinancialWeb.Models.ModelMerchantSummary>
<div class="block" style="width: 100%; float: left">
<p class="block-heading">
Merchant Application Report
</p>
<div class="table-holder">
<table class="table" style="margin-bottom: 0px">
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
<input type="checkbox" name="ints" value=item.ApplicationID />
</td>
<td>
@Html.ActionLink(item.ApplicationID.ToString(), "ViewApplication", new { ID = item.ApplicationID, edit = 1 }, new AjaxOptions { HttpMethod = "GET" })
</td>
<td>
@Convert.ToDateTime(item.ApplicationDate).ToString("M/d/yy")
</td>
<td>
@item.ApplicantName
</td>
</tbody>
</table>
</div>
</div>
@Html.ActionLink("Print Application", "PrintApplication", "CreateContract", new { @class = "btn btn-primary" })
控制器:
[AuthorizeAdmin]
public ActionResult PrintApplication(ICollection<int> ints, string ID)
{
Contracts_Create contract = new Contracts_Create();
ModelApplication currentApplication = new ModelApplication();
currentApplication.contract = new ModelContract();
return File(contract.CreatePDF_PrintedApplication_English(currentApplication.contract.location, currentApplication.contract), "application/pdf");
}
编辑: 这被标记为另一个问题的副本。问题在于是否可以使用非顺序输入名称。我的问题是我使用的输入不是非顺序的,但它仍然不起作用。我理解这个概念,我只是无法弄清楚为什么我的特定代码不起作用。我已经为此投入了大量时间,但找不到我的特定代码的答案。谢谢!
【问题讨论】:
-
您是否尝试过将 PrintApplication 操作方法签名上的 ICollection
更改为 string[] 并查看是否可行?如果您绑定到数组或集合,我相信它必须是顺序的。 -
@br4d.net 尝试了 string [] ,我得到了同样的结果;整数为空。感谢您的建议。
-
我没有在您的视图中看到表单(并且缺少 } )。你是在做 GET 还是 POST? ModelMerchantSummary 是数据库实体还是 ViewModel?
-
这是部分视图。该视图实际上很长(表中有很多列),因此我将其缩短以将其发布在这里;可能丢失的 { 来自哪里。没有 GET 或 POST;只是一个动作链接。 ModelMerchantSummary 是一个 ViewModel。
标签: c# asp.net-mvc asp.net-mvc-4 razor checkbox