私はまだASP.net MVC3に慣れていないので、ユーザーに追加できるアイテムの選択可能なリストを作成しようとしています. したがって、Get メソッドは次のようになります。
public ViewResult AddFavourite(int id)
{
ViewBag.UserId = id;
var movies = (from m in db.Movies
select new SelectableMovie() { Movie = m });
return View(movies.ToList());
}
ビューは次のようになります
@using MovieManager.Models
@model List<SelectableMovie>
@using (Html.BeginForm("AddFavourite", "Users",
new { userId = ViewBag.UserId, movies = Model }, FormMethod.Post))
{
<table>
<tr>
<th>
Add
</th>
<th>
Title
</th>
<th>
Description
</th>
<th>
ReleaseDate
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.CheckBoxFor(modelItem => item.Selected)
</td>
<td>
@Html.DisplayFor(modelItem => item.Movie.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.Movie.Description)
</td>
<td>
@Html.DisplayFor(modelItem => item.Movie.ReleaseDate)
</td>
</tr>
}
</table>
<p>
<input type="submit" value="Add Favourites" />
</p>
}
これは意図したとおりにリストを表示しますが、コントローラーにポストバックすると userId を取得しますが、movies パラメーターは空のリストです。ビューで使用されているモデルをコントローラーに戻して、ポスト アクションで使用するにはどうすればよいですか? 投稿アクションは次のようになります
[HttpPost]
public ActionResult AddFavourite(int userId, List<SelectableMovie> movies)
{
User user = db.Users.Single(u => u.ID == UserId);
//add items here
return View("Details", user);
}