0

在我的 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 错误。

谢谢!

4

1 回答 1

2

你不能通过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
}
于 2013-03-07T19:55:03.857 回答