“对象”不包含“十”的定义

时间:2018-08-27 17:04:41

标签: asp.net asp.net-mvc

考虑以下代码:

控制器:

 public ActionResult ShowMenu ()
        {
            if(Session["ID"] != null && Session["Ten"] != null && Session["User"] != null)
            {
                int id = (int)Session["ID"];
                ViewBag.user=  db.ChucNangs.Join(db.Chuc_Nang_Quan_Tris, x => x.ID, y => y.MaChucNang, (x, y) => new {Ten = x.Ten, DuongDan = x.DuongDan,Icon= x.Icon, TrangThai = x.TrangThai }).Where(x=>x.TrangThai == true).ToList();
                return PartialView("_menu_right");
            }
            return RedirectToAction("Logout");
        }

enter image description here

我有一个匿名类型的对象,尽管有数据,但仍然显示错误。

如何防止此错误?

2 个答案:

答案 0 :(得分:0)

您不能使用匿名类型通过ViewBag将数据从操作方法传递到视图。 创建一个视图模型类来表示您要传递的数据。 公共课程YourVm {     公共字符串十{集;得到; }     公共字符串DuongDan {set;得到; }     公共字符串Icon {set;得到; }     公共字符串TrangThai {set;得到; } } 然后在您的LINQ表达式中,使用此视图模型而不是匿名类型进行投影。  新的YourVm {十= x。十,                DuongDan = x.DuongDan,                图标= x.Icon,                TrangThai = x.TrangThai})

答案 1 :(得分:0)

您不能这样做。只是让您的生活更轻松,并使用所需的所有属性创建一个视图模型类即可。 检查这一点:

Stuffing an anonymous type in ViewBag causing model binder issues