1

エピソードとブール値の「監視済み」を含むビューモデルがあります。

public class WatchedEpisodeViewModel
{
    public Episode Episode { get; set; }
    public bool Watched { get; set; }
}

私の見解にバインドされたこれらのリストがあります:

@model IEnumerable<Seriebeheer.Web.Models.WatchedEpisodeViewModel>

私はこの情報をリストしています:

         @foreach (var episode in Model)
         {
             <tr>
                 <td>@episode.Episode.ID</td>
                 <td>@episode.Episode.Name</td>
                 <td>@episode.Episode.Date.Value.ToString("dd/MM/yyyy")</td>
                 <td><input type="checkbox" value="@episode.Episode.ID" checked="@episode.Watched"/></td>
             </tr>
         }

ユーザーはチェックボックスをマークし、ボタンを押して情報を送信できます。どのチェックボックスがマークされているか、どのチェックボックスがマークされていないかをコントローラーで確認したいと思います。

これを達成するための最良の方法は何ですか?

編集:

[HttpPost]
public ActionResult Checkin(IEnumerable<WatchedEpisodeViewModel> episodes)
{
    foreach (WatchedEpisodeViewModel episode in episodes) <-- nullreference exception
    {
        if (episode.Watched)
        {
            // test
        }
    }
    return RedirectToAction("Index", "Home");
}
4

2 に答える 2

2

問題は、ループではなくループを使用していることforeachです。ループを使用する必要があります。これにより、各フィールドに正しいインデックスが与えられ、モデル バインダーが処理できるようになります。forfor

CheckBoxForもう1つの問題は、モデルのWatchedboolで行う必要があることです。

最後の問題はHiddenFor、エピソード フィールドに s がないことです。そのため、投稿すると、モデル内の各アイテムのエピソードとして何が視聴されているかわかりません。null

代わりにこれを試してください:

@for (int i = 0; i < Model.Count(); i++)
{
    <tr>
        <td>
            @Html.HiddenFor(m => m[i].Episode.ID)
            @Model[i].Episode.ID
        </td>
        <td>
            @Html.HiddenFor(m => m[i].Episode.Name)
            @Model[i].Episode.Name
        </td>
        <td>
            @Html.HiddenFor(m => m[i].Episode.Date)
            @Model[i].Episode.Date.Value.ToString("dd/MM/yyyy")
        </td>
        <td>
            @Html.CheckBoxFor(m => m[i].Watched)
        </td>
    </tr>
}
于 2013-02-20T13:22:02.347 に答える
0

モデルにポストバックするときにチェックボックスのリストをバインドするのが難しいため、これは MVC でよくある問題です。これで FormCollection を調べることができますが、それは実際には効率的ではありません。

以前にこの拡張機能を使用したことがあり、シナリオがはるかに単純になりました。CheckBoxList(For)手順は非常に簡単で、パッケージは Nuget で入手できます。

于 2013-02-20T12:14:57.317 に答える