2013-03-24 51 views
0
public class Movies 
{ 
    [Key] 
    public int movieID { get; set; } 

    public String Title { get; set; } 

    public virtual Genres parentGenre { get; set; } 
} 


public class Genres 
{ 
    public Genres() 
    { 
     this.movies = new HashSet<Movies>(); 
    } 

    [Key] 
    public int genreId { get; set; } 

    public String genreName { get; set; } 

    public ICollection<Movies> movies { get; set; } 
} 

我可以在我的addmovie視圖頁上通過閱讀流派表成功創建DropDownList。ASP MVC表外鍵配置

但是,當我嘗試提交頁面時,它聲明「值'10'是無效的。」這導致我相信我正試圖將一個Int(從下拉列表值)放入一個對象(來自「流派parentGenre」)。

我是否已經將「Genre parentGenre」設置爲正確的「genreId」外鍵關係,它只應該爲「parentGenre」字段指定一個「數字」還是期望更多?

補充說:

控制器:

[HttpPost] 
    public ActionResult Create(Movies movies) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Movies.Add(movies); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     IEnumerable<SelectListItem> items = db.Genres 
      .Select(c => new SelectListItem 
          { 
           Value = SqlFunctions.StringConvert((double)c.genreId).Trim(), 
           Text = c.genreName 
          }); 
     ViewBag.genreId = items; 
    } 

觀點:

<div class="editor-label"> 
     @Html.LabelFor(model => model.parentGenre.genreName) 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownListFor(model => model.parentGenre,(IEnumerable<SelectListItem>)ViewBag.genreId) 
     @Html.ValidationMessageFor(model => model.parentGenre) 
+0

你如何發佈價值?你可以添加更多的控制器/視圖代碼,以便我們可以更好地瞭解發生了什麼? – antinescience 2013-03-24 20:44:08

+0

添加到上面.... ty的回覆:) – user2182715 2013-03-24 20:53:36

+0

在你的DropDownListFor,你有沒有嘗試過使用model.parentGenre.genreId?我相信MVC模型綁定,你實際上必須使用該屬性,否則它不知道該綁定到什麼。現在,它試圖將一個整數綁定到一個複雜的對象上,並且不改變模型綁定器,它不能實現這個飛躍。 – antinescience 2013-03-24 21:04:43

回答

1

代替您的意見,這裏是我建議:

型號:

public class Movie 
    { 
     [Key] 
     public int MovieID { get; set; } 

     public String Title { get; set; } 

     public int GenreId { get; set; } 

     public virtual Genre Genre { get; set; } 
} 

public class Genre 
{ 
    public Genre() 
    { 
     this.movies = new HashSet<Movies>(); 
    } 

    [Key] 
    public int GenreId { get; set; } 

    public String Name { get; set; } 

    public ICollection<Movies> Movies { get; set; } 
} 

控制器:

[HttpPost] 
public ActionResult Create(Movie Movie) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Movies.Add(Movie); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    IEnumerable<SelectListItem> items = db.Genres 
     .Select(c => new SelectListItem 
         { 
          Value = SqlFunctions.StringConvert((double)c.GenreId).Trim(), 
          Text = c.Name 
         }); 
    ViewBag.genreId = items; 
} 

查看:

<div class="editor-label"> 
    @Html.LabelFor(model => model.Genre.Name) 
</div> 
<div class="editor-field"> 
    @Html.DropDownListFor(model => model.Genre.Id,(IEnumerable<SelectListItem>)ViewBag.genreId) 
    @Html.ValidationMessageFor(model => model.Genre) 
</div> 

如果我閱讀你正確地做什麼,應該工作。儘管我對EF沒有太多的瞭解,所以我不能100%確定。

+0

現在它說「流派名稱是必需的」,它與Genre.genreName errormessage一起使用。我目前正在閱讀綁定頁面,被要求 – user2182715 2013-03-24 22:00:25

+0

給我,您的帖子(newb,我)說寫信給體裁表,我真的需要這樣做嗎?我認爲風格桌只是爲了看起來。 – user2182715 2013-03-24 22:22:26

+0

編輯反映我們的討論 - 感興趣,如果這最終幫助,只是讓我知道! – antinescience 2013-03-25 01:48:12