通过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发送的List在控制器中总是空的

你不能通过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
}