我有一个局部视图,我希望客户端使用复选框进行选择。然后,我希望在单击提交按钮时将所选项目的ID发送到控制器。控制器将重定向到验证视图。什么是一个好的,简单的,安全的解决方案?我想尽可能避免使用Javascript。谢谢!
查看
@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" } )
}
MODEL
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; }
}
}
CONTROLLER
public ActionResult VerifyOrderInfo()
{
return View();
}
答案 0 :(得分:1)
有很多方法可以做到这一点。需要对代码进行最少更改的方法是:
将您的表单更改为发布,并将操作更改为 VerifyOrderInfo
@using (Html.BeginForm("VerifyOrderInfo", "ReserveItem", FormMethod.Post))
将IEnumerable更改为列表,以便您可以按索引进行绑定
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填充ItemProfile列表,并使用IsSelected作为输入项。