在Mvc中绑定DropDownList并获取选定值

时间:2014-07-17 09:29:45

标签: c# asp.net-mvc c#-4.0

我的模特是

public class ChildMenu
{
    public string Name { get; set; }
    public string Comments { get; set; }
    public List<UlrikenModel.ulriken_tblChildMenu> FormDetails { get; set; }
    public long pkChildMenuID { get; set; }
    public long fkSubMenuID { get; set; }

    [Required(ErrorMessage = "Requird")]
    public string ChildManuName { get; set; }
    public DateTime CreatedDate { get; set; }
    public DateTime ModifiedDate { get; set; }
    public string Events { get; set; }
    public IList<SelectListItem> Drp_Submenu { get; set; }

}

我的控制器操作是:

 public ActionResult FillDeptName()

        {
            UlrikenEntities db1 = new UlrikenModel.UlrikenEntities();

            List<SelectListItem> list = new List<SelectListItem>();

            list.Add(new SelectListItem { Text = "-Please select-", Value = "Selects 

items" });

            var cat = (from c in db1.ulriken_tblSubMenu where c.fkMainMenuID == 1 && 

c.Status == true select new { c.pkSubMenuID,c.SubManuName }).ToArray();

            for (int i = 0; i < cat.Length; i++)

            {

                list.Add(new SelectListItem

                {

                    Text = cat[i].SubManuName,

                    Value = cat[i].pkSubMenuID.ToString(),

                    Selected = (cat[i].pkSubMenuID == 1)

                });

            }          

            ViewBag.list = list;            

            return View("ChildMenuOfSubMenu", ViewBag.list);

        }

        [HttpPost]

        [ValidateInput(false)]

        public ActionResult ChildMenuOfSubMenu(ChildMenu obj)

        {

            UlrikenEntities db = new UlrikenEntities();

            ulriken_tblChildMenu objchild = new ulriken_tblChildMenu();

            objchild.fkSubMenuID = obj.fkSubMenuID;

            objchild.ChildMenuName = obj.ChildManuName;

            objchild.cPageBody = obj.Name;

            db.ulriken_tblChildMenu.Add(objchild);

            db.SaveChanges();

            return View("ChildMenuOfSubMenu");

        }

并且查看

 @Html.DropDownListFor(m=>m.fkSubMenuID, 

(IEnumerable<SelectListItem>)ViewBag.list,"Select" ,new { id = "ddlSubMenu" })

在开始下拉列表绑定成功但在将数据保存到数据库后显示

中的异常

as&#34;没有类型&#39; IEnumerable<SelectListItem>&#39;的ViewData项目。有钥匙的

&#39; fkSubMenuID&#39;&#34;

AnyBody指导我在哪里做错了。

1 个答案:

答案 0 :(得分:0)

将该代码移动到辅助类:

public class ControllerHelper
{
    public List<SelectListItem> FetchListItems()
    {

        List<SelectListItem> list = new List<SelectListItem>();

        list.Add(new SelectListItem { Text = "-Please select-", Value = "Selects items" });

        var cat = (from c in db1.ulriken_tblSubMenu where c.fkMainMenuID == 1 && 

        c.Status == true select new { c.pkSubMenuID,c.SubManuName }).ToArray();

        for (int i = 0; i < cat.Length; i++)

        {

            list.Add(new SelectListItem

            {

                Text = cat[i].SubManuName,

                Value = cat[i].pkSubMenuID.ToString(),

                Selected = (cat[i].pkSubMenuID == 1)

            });

        }
    return list;
    }
}

然后你的控制器看起来像:

public ActionResult FillDeptName()

        {
            UlrikenEntities db1 = new UlrikenModel.UlrikenEntities();

            ViewBag.list = new ControllerHelper().FetchListItems();        

            return View("ChildMenuOfSubMenu", ViewBag.list);

        }

        [HttpPost]

        [ValidateInput(false)]

        public ActionResult ChildMenuOfSubMenu(ChildMenu obj)

        {

            UlrikenEntities db = new UlrikenEntities();

            ulriken_tblChildMenu objchild = new ulriken_tblChildMenu();

            objchild.fkSubMenuID = obj.fkSubMenuID;

            objchild.ChildMenuName = obj.ChildManuName;

            objchild.cPageBody = obj.Name;

            db.ulriken_tblChildMenu.Add(objchild);

            db.SaveChanges();

            ViewBag.list = new ControllerHelper().FetchListItems();

            return View("ChildMenuOfSubMenu");

        }

当然:

new ControllerHelper().FetchListItems();

应该是控制器类中的一个字段,例如:

private ControllerHelper controlerHelper;

如果您使用DI,则可以使用Interface而不是concerete实现。

此致