2013-03-24 63 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