MVC 将部分视图中的选定复选框项目传递给控制器
MVC Pass Selected Checkbox Items in Partial View to Controller
我有部分观点认为我希望客户使用复选框进行选择。然后我希望在单击提交按钮时将所选项目的 ID 发送到控制器。控制器将重定向到验证视图。什么是好的、简单且安全的解决方案?如果可能的话,我想避免使用 Javascript。谢谢!
VIEW
@model OrderTracking.Models.ViewModel.ItemDataView
<div>
@using (Html.BeginForm("VerifyItem", "ReserveItem", FormMethod.Get))
{
//@Html.AntiForgeryToken() //TODO: Wire-up
<table class="table table-striped table-condensed table-hover">
<thead>
<tr>
<th></th>
<th>Item ID</th>
</tr>
</thead>
<tbody>
@foreach (var i in Model.ItemProfile)
{
<tr>
<td>@Html.CheckBoxFor(r => i.IsSelected, new { @class = "checkbox" })</td>
<td>@Html.DisplayFor(r => i.ItemId)</td>
</tr>
}
</tbody>
</table>
@Html.ActionLink("Verify Order Information", "VerifyOrderInfo", "ReserveItem", "", new { @class = "btn btn-primary btn-large" } )
}
型号
namespace OrderTracking.Models.ViewModel
{
public class ItemProfileView
{
[Key]
public int ItemId { get; set; }
public bool IsSelected { get; set; }
}
public class ItemDataView
{
public IEnumerable<ItemProfileView> ItemProfile { get; set; }
}
}
控制器
public ActionResult VerifyOrderInfo()
{
return View();
}
有很多方法可以做到这一点。需要对您的代码进行最少更改的一个是:
将表单更改为 Post 并将操作更改为 VerifyOrderInfo
@using (Html.BeginForm("VerifyOrderInfo", "ReserveItem", FormMethod.Post))
将 IEnumerable 更改为 List 这样您就可以通过索引
进行绑定
public List<ItemProfileView> ItemProfile { get; set; }
现在您可以通过索引引用复选框并为 ItemId 添加隐藏输入
@Html.CheckBoxFor(r => r.ItemProfile[i].IsSelected, new { @class = "checkbox" })
@Html.HiddenFor(r => r.ItemProfile[i].ItemId)
使用 提交 按钮而不是 ActionLink
<input type="submit" name="Verify Order Information" class="btn btn-primary btn-large" />
将模型添加到 VerifyOrderInfo 操作中,以便您可以针对它进行编码
public ActionResult VerifyOrderInfo(ItemDataView model)
现在,当您提交表单时,它应该将模型发送到操作中,其中包含填充了 ItemId 和 IsSelected 的 ItemProfile 列表。
我有部分观点认为我希望客户使用复选框进行选择。然后我希望在单击提交按钮时将所选项目的 ID 发送到控制器。控制器将重定向到验证视图。什么是好的、简单且安全的解决方案?如果可能的话,我想避免使用 Javascript。谢谢!
VIEW
@model OrderTracking.Models.ViewModel.ItemDataView
<div>
@using (Html.BeginForm("VerifyItem", "ReserveItem", FormMethod.Get))
{
//@Html.AntiForgeryToken() //TODO: Wire-up
<table class="table table-striped table-condensed table-hover">
<thead>
<tr>
<th></th>
<th>Item ID</th>
</tr>
</thead>
<tbody>
@foreach (var i in Model.ItemProfile)
{
<tr>
<td>@Html.CheckBoxFor(r => i.IsSelected, new { @class = "checkbox" })</td>
<td>@Html.DisplayFor(r => i.ItemId)</td>
</tr>
}
</tbody>
</table>
@Html.ActionLink("Verify Order Information", "VerifyOrderInfo", "ReserveItem", "", new { @class = "btn btn-primary btn-large" } )
}
型号
namespace OrderTracking.Models.ViewModel
{
public class ItemProfileView
{
[Key]
public int ItemId { get; set; }
public bool IsSelected { get; set; }
}
public class ItemDataView
{
public IEnumerable<ItemProfileView> ItemProfile { get; set; }
}
}
控制器
public ActionResult VerifyOrderInfo()
{
return View();
}
有很多方法可以做到这一点。需要对您的代码进行最少更改的一个是:
将表单更改为 Post 并将操作更改为 VerifyOrderInfo
@using (Html.BeginForm("VerifyOrderInfo", "ReserveItem", FormMethod.Post))
将 IEnumerable 更改为 List 这样您就可以通过索引
进行绑定public List<ItemProfileView> ItemProfile { get; set; }
现在您可以通过索引引用复选框并为 ItemId 添加隐藏输入
@Html.CheckBoxFor(r => r.ItemProfile[i].IsSelected, new { @class = "checkbox" })
@Html.HiddenFor(r => r.ItemProfile[i].ItemId)
使用 提交 按钮而不是 ActionLink
<input type="submit" name="Verify Order Information" class="btn btn-primary btn-large" />
将模型添加到 VerifyOrderInfo 操作中,以便您可以针对它进行编码
public ActionResult VerifyOrderInfo(ItemDataView model)
现在,当您提交表单时,它应该将模型发送到操作中,其中包含填充了 ItemId 和 IsSelected 的 ItemProfile 列表。