2012-10-31 66 views
2

我是stil新的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> 
} 

這將顯示如預期的列表,但是當我回發到控制器我得到用戶ID,但電影參數爲空名單。我如何將視圖中使用的模型返回到Post Action中使用的控制器? 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); 
    } 

回答

6
@for (int i = 0; i < Model.Count; i++) 
{ 
    <tr> 
     <td> 
      @Html.CheckBox("movies[" + i + "].Selected", Model[i].Selected) 
     </td> 
     <td> 
      @Html.Display("movies[" + i + "].Movie.Title", Model[i].Movie.Title) 
     </td> 
     <td> 
      @Html.Display("movies[" + i + "].Movie.Description", Model[i].Movie.Description) 
     </td> 
     <td> 
      @Html.Display("movies[" + i + "].Movie.ReleaseDate", Model[i].Movie.ReleaseDate) 
     </td> 
    </tr> 
} 

編輯:這是很好的例子:http://code-inside.de/blog-in/2012/09/17/modelbinding-with-complex-objects-in-asp-net-mvc/

+0

使用沒有幫助。發回的列表仍然是一個空列表。 –

+0

@RyanBurnham然後試試這個。這個想法是,你應該枚舉你的電影。 – karaxuna

+0

問題不在視圖中顯示。但是那個鏈接確實有助於給我一個想法。事實證明,這是因爲我試圖通過匿名對象手動設置Post方法的電影參數。如果我刪除了此屬性mvc模型聯編程序工作。 –

2

了吧,跟我想的匿名對象我創建包括手動設置電影參數用戶標識。通過包含電影屬性,它正在重寫綁定。

在我看來

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模型綁定處理電影參數,我POST方法

除了這個作爲@karaxuna聲明你需要使用for循環而不是foreach循環,否則它不會綁定到模型。

相關問題