首页 新闻 会员 周边 捐助

新手求助,MVC5

0
悬赏园豆:5 [已解决问题] 解决于 2013-11-17 16:08
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下的项目

时光刺客的主页 时光刺客 | 初学一级 | 园豆:60
提问于:2013-11-12 13:46
< >
分享
最佳答案
1

楼主建议你贴出显示的Action代码和提交的Action代码,这样好分析是什么原因,据我猜测楼主应该是在点击提交之后没有给ViewBag.CategoryName赋值导致@Html.DropDownList("CategoryName", "请选择")取数据的时候没取到,希望对你有所帮助

收获园豆:5
netqiang | 菜鸟二级 |园豆:405 | 2013-11-12 14:49

谢谢你的提醒,确实是忘了赋值

顺便请教下Product类中的public virtual ProductCategory ProductCategory { get; set; }这种要怎么处理,DropDownList得到的是string,即使int.Parse()对应ProductCategory类中的int Id之后还是会报错 对一个或多个实体的验证失败该怎么处理

时光刺客 | 园豆:60 (初学一级) | 2013-11-12 19:57

@时光刺客:ef我没用过,不是很熟,你说地处理是给这个属性赋值吗?按理说Product类里面应该有CategoryID吧,你只需要给这个CategoryID赋值就行了

netqiang | 园豆:405 (菜鸟二级) | 2013-11-12 23:03
其他回答(3)
0

前台这样写:@Html.DropDownListFor(m=>m.CategoryName, ViewBag.CategoryName as SelectList)

幻天芒 | 园豆:37207 (高人七级) | 2013-11-12 14:56
0

将@Html.DropDownList("CategoryName", "请选择")

换成@Html.DropDownList("CategoryName", "请选择",as SelectList)试试

wuwenmao | 园豆:202 (菜鸟二级) | 2013-11-12 16:45
0

响应你点击的的那个action 里面没有返回值

特别是指没有返回CategoryName

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2013-11-13 11:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册