通过actionlink发送的List在控制器中总是空的
本文关键字:控制器 List actionlink 通过 | 更新日期: 2023-09-27 18:02:44
在我的MVC应用程序中,我有一个视图,根据布尔属性为列表中的每个项目生成复选框。
视图显示良好,没有问题。
我想根据复选框是否被选中来获取列表中的每个项目。
第一步是这个actionlink:
<p>
Send Items: @Html.ActionLink("Click Here", "SendItems")
</p>
这是控制器中写的方法:
public ActionResult SendItems(IList<ObjInfo> listToSend)
{
m_ListInventoryToSend = new List<ObjInfo>();
foreach (var item in listToSend.Where(item => item.m_IsSelected))
{
m_ListInventoryToSend.Add(item);
}
return View(m_ListInventoryToSend);
}
现在我面临许多问题,因为我正在学习如何编写MVC应用程序,我真的需要你的帮助:
- 当调试碰到该方法时,listToSend对象总是null;
- 同样,这些复选框的每个隐藏字段都是假的,即使值"checked"为真;
- 如果我把"HttpPost"属性放在方法上,应用程序会返回NotFound错误。
谢谢!
你不能通过ActionLink
发送列表(除非你做一些非常丑陋的查询字符串构建)。
首先,你应该做的是创建一个保存布尔值的模型:
public class MyModel
{
public List<ObjInfo> Items { get; set; }
}
在视图中设置你的模型:
@model MyModel
循环通过你的模型项目,把一个复选框(必须是一个for
循环模型绑定工作):
@using (Html.BeginForm("SendItems", "ControllerName")
{
for (int i = 0; i < Model.Items.Count; i++)
{
@* Have hidden fors to keep any other data in the class*@
@HiddenFor(m => m.Items[i].Id)
@Html.CheckBoxFor(model => model.Items[i].IsChecked)
}
<input type="submit" value="Save" />
}
然后,有一个Post方法,像这样:
[HttpPost]
public ActionResult SendItems(MyModel model)
{
foreach (var item in model.Items.Where(item => item.IsSelected))
{
m_ListInventoryToSend.Add(item);
}
//rest of your post action
}