public class ProductCategory { [Key] public int Id { get; set; } [DisplayName("類別名稱")] [Required(ErrorMessage = "請輸入類別名稱")] [MaxLength(20, ErrorMessage = "類別名稱不可超過20個字")] public string CategoryName { get; set; } //其它省略 public virtual ICollection<Product> Products { get; set; } } public class Product { [Key] public int Id { get; set; } [DisplayName("類別")] [Required] public virtual ProductCategory ProductCategory { get; set; } [DisplayName("名稱")] [Required(ErrorMessage = "請輸入名稱")] public string ProductName { get; set; } //其它省略 }
在MVC5里面怎么实现用DropDownList/DropDownListFor选择类别(ProductCategory),输入名称......。提交表单httppost到数据库。
问题是Controller中写了
ViewBag.CategoryName = new SelectList(db.ProductCategories, "Id", "CategoryName");
View里面写
@Html.DropDownList("CategoryName", "请选择")
显示正常,IE中查看生成的HTML页貌似正常,但点击提交总是提示@Html.DropDownList("CategoryName", "请选择")出错
不存在具有键“CategoryName”的“IEnumerable<SelectListItem>”类型的 ViewData 项。
请问httppost的ActionResult应该怎样写。新手求教
PS:这是Visual Studio 2013中Entity Framework 6.0.1 ,.Net Framework 4.5.1下的项目
楼主建议你贴出显示的Action代码和提交的Action代码,这样好分析是什么原因,据我猜测楼主应该是在点击提交之后没有给ViewBag.CategoryName赋值导致@Html.DropDownList("CategoryName", "请选择")取数据的时候没取到,希望对你有所帮助
谢谢你的提醒,确实是忘了赋值
顺便请教下Product类中的public virtual ProductCategory ProductCategory { get; set; }这种要怎么处理,DropDownList得到的是string,即使int.Parse()对应ProductCategory类中的int Id之后还是会报错 对一个或多个实体的验证失败。该怎么处理
@时光刺客:ef我没用过,不是很熟,你说地处理是给这个属性赋值吗?按理说Product类里面应该有CategoryID吧,你只需要给这个CategoryID赋值就行了
前台这样写:@Html.DropDownListFor(m=>m.CategoryName, ViewBag.CategoryName as SelectList)
将@Html.DropDownList("CategoryName", "请选择")
换成@Html.DropDownList("CategoryName", "请选择",as SelectList)试试
响应你点击的的那个action 里面没有返回值
特别是指没有返回CategoryName