【发布时间】:2013-09-10 15:35:24
【问题描述】:
目前我有以下实体:
电影:
public class Movie
{
public int ID { get; set; }
[Required]
public string Title { get; set; }
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
[Required]
public string Genre { get; set; }
[DataType(DataType.Currency), Range(1,100)]
public decimal Price { get; set; }
[StringLength(5)]
public string Rating { get; set; }
[StringLength(200)]
public string comments { get; set; }
public Director director { get; set; }
}
导演:
[Table("Director")]
public class Director
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required, MaxLength(50)]
[Display(Name = "Name")]
public string name { get; set; }
[Required, MaxLength(50)]
[Display(Name = "Last Name")]
public string lastName { get; set; }
[Required, Range(1,100)]
public int age { get; set; }
[NotMapped]
public string fullName {
get { return this.name + " " + this.lastName; }
}
}
当我访问编辑表单时,我从数据库中的 Director 加载一个 SelectList:
public ActionResult Edit(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
ViewBag.Directors = new SelectList(db.Directors.ToList(), "ID", "fullname");
return View(movie);
}
然后我使用@Html.DropDownListFor 在表单中显示组合框:
<div class="editor-field">
@Html.DropDownListFor(model => model.director, (SelectList)ViewBag.Directors, "Select")
@Html.ValidationMessageFor(model => model.director)
</div>
一切似乎都很好,但是当我选择一个选项并尝试保存表单时,我收到一条验证消息,提示“值 '1' 无效”。其中“1”是导演 ID。
所以,我肯定缺少直接绑定 Director 的东西。
【问题讨论】:
-
您的下拉列表是一个 ID 列表,您的 director 属性的类型是
Director。您应该在该Movie类的某处有一个DirectorID属性。 -
难道没有办法在不添加 DirectorID 的情况下完成同样的任务吗?
-
您必须构建一个自定义模型绑定器才能使其工作。或者更好的方法是专门为表单创建一个 ViewModel,包含 DirectorId 属性。
-
请显示控制器动作,httpPost 一个
-
我会检查自定义模型绑定器。
标签: c# asp.net-mvc-4 razor