Asp.net mvc 3 将列表模型发回控制器

Asp.net mvc 3 将列表模型发回控制器,asp.net-mvc-3,Asp.net Mvc 3,我还是ASP.net MVC3新手,我正在尝试创建一个可添加到用户的可选项目列表。所以Get方法看起来像 public ViewResult AddFavourite(int id) { ViewBag.UserId = id; var movies = (from m in db.Movies select new SelectableMovie() { Movie = m });

我还是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>
}
景色看起来像

    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>
}
@使用MovieManager.Models
@模型列表
@使用(Html.BeginForm(“AddFavorite”,“Users”,
新的{userId=ViewBag.userId,movies=Model},FormMethod.Post))
{
添加
标题
描述
发布日期
@foreach(模型中的var项目)
{
@CheckBoxFor(modelItem=>item.Selected)
@DisplayFor(modeleItem=>item.Movie.Title)
@DisplayFor(modelItem=>item.Movie.Description)
@DisplayFor(modelItem=>item.Movie.ReleaseDate)
}

}
这会按预期显示列表,但当我发回控制器时,我会得到一个用户ID,但movies参数是一个空列表。如何将视图中使用的模型返回到要在后期操作中使用的控制器?Post操作如下所示

    [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);
    }
[HttpPost]
public ActionResult addfavorite(int userId,列出电影)
{
User User=db.Users.Single(u=>u.ID==UserId);
//在此处添加项目
返回视图(“详细信息”,用户);
}
@for(int i=0;i

编辑:这是一个很好的例子:

明白了,我试图在我创建的匿名对象中手动设置movies参数以包含用户id。通过包含movies属性,它覆盖了绑定

在我看来,using语句

@using (Html.BeginForm("AddFavourite", "Users",
    new { userId = ViewBag.UserId, movies = Model }, FormMethod.Post))
{
应该是

 @using (Html.BeginForm("AddFavourite", "Users",
        new { userId = ViewBag.UserId }, FormMethod.Post))
    {
MVC模型绑定器在my Post方法中处理电影参数


除此之外,正如@karaxuna所述,您需要使用for循环而不是foreach循环,否则它将不会绑定到模型。

使用for没有帮助。发回的列表仍然是一个空列表。@RyanBurnham试试这个。这个想法是你应该列举你的电影。问题不在于它没有显示在视图中。但这个链接确实给了我一个想法。原来是因为我试图通过匿名对象手动设置Post方法的movies参数。如果我删除了此属性,mvc模型绑定器将正常工作。抱歉,我没有提到您正在通过表单路由值传递电影:)@RyanBurnham,但您仍然必须枚举电影对象