0

MVCContrib グリッド:

@model ViewModel
@using (Html.BeginForm("SendData", "Home", FormMethod.Post))
{
    @Html.Grid(Model.List).Columns(c =>
    {
        c.For(x => x.Id);
        c.For(x => x.Name);
        c.For(x =>Html.Partial("Partial/CheckBoxTemplate", new CheckBoxViewModel { Id = x.Id })).Named("Options");
    })

    @Html.SubmitButton()
}

コントローラ ポスト アクション:

public ActionResult SendData(List<CheckBoxViewModel> list)
{
    return View();
}

ビューモデル:

public class CheckBoxViewModel
{
    public int Id { get; set; }
    public bool CheckBox { get; set; }
}

public class ViewModel
{
    public IPagination<Data> List { get; set; }
}

public class Data
{
    public int Id { get; set; }
    public string Name { get; set; } 
}

部分図:

@model MvcApplication1.Models.CheckBoxViewModel

@Html.HiddenFor(x => x.Id)
@Html.CheckBoxFor(x => x.CheckBox)

すべてのチェックボックスは、デフォルトではチェックされていません。

SendDataアクションでチェックされたすべてのチェックボックスの値を取得するにはどうすればよいですか?

4

1 に答える 1

1

ビューの要件を反映する実際のビューモデルを使用することをお勧めします(各行にチェックボックスを含むグリッドを表示し、アイテムのIDと名前を表示し、ポストバックアクションのリストでそれらの値を取得します) :

public class CheckBoxViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool CheckBox { get; set; }
}

public class ViewModel
{
    public IPagination<CheckBoxViewModel> List { get; set; }
}

次に、ビューをこのビューモデルに強く入力します。

@model ViewModel

@using (Html.BeginForm("SendData", "Home", FormMethod.Post))
{
    @Html.Grid(Model.List).Columns(c =>
    {
        c.For(x => x.Id);
        c.For(x => x.Name);
        c.For(x => Html.Partial("Partial/CheckBoxTemplate", x)).Named("Options");
    })

    <button type="submit">OK</button>
}

最後に、パーシャルは次のようになります。

@model CheckBoxViewModel

@{
    var index = Guid.NewGuid().ToString();
}

@Html.Hidden("list.Index", index)
@Html.Hidden("list[" + index + "].Id", Model.Id)
@Html.Hidden("list[" + index + "].Name", Model.Name)
@Html.CheckBox("list[" + index + "].CheckBox", Model.CheckBox)

これで、SendDataアクションが呼び出されると、ビューモデルのリストが渡されます。

または、にHtml.BeginCollectionItem示されているヘルパーを使用することもできfollowing articleます。これにより、強く型付けされたバージョンのヘルパーを使用できるようになります。

@model CheckBoxViewModel
@using(Html.BeginCollectionItem("list")) 
{
    @Html.HiddenFor(x => x.Id)
    @Html.HiddenFor(x => x.Name)
    @Html.CheckBoxFor(x => x.CheckBox)
}

さらに読むことをお勧めします:Model Binding To A List

于 2012-10-28T17:38:56.880 に答える