0

私のMVCアプリには、ブール値のプロパティに基づいてリスト内のすべてのアイテムのチェックボックスを生成するビューがあります。

ビューは問題なく正常に表示されます。

チェックボックスがオンになっているかどうかに基づいて、リスト内のすべてのアイテムを取得したいと思います。

最初のステップは次のアクションリンクです。

<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」の値がtrueであっても、これらのチェックボックスの各非表示フィールドはfalseです。
  • メソッドに「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 に答える