如何发送记录列表属于从控制器到mvc中的三个表

时间:2013-10-01 12:24:41

标签: asp.net-mvc asp.net-mvc-4

我有三张表,比如

分类----> Id,名称

CategoryCertifications ---> CategoryId,CertificationId

认证-----> Id,名称,摘要

我想在视图页面中显示certificationName和summary的列表。

我试过像这样

ViewBag.CategoryCertifications=from pd in db.categories join od in db.categorycertifications on pd.id equals od.CategoryId join ct in db.certifications on od.certificationId equals ct.id select new { ct.Name,ct.Summary }).ToList();

在ViewPage中,我提到了Like Below

var categories=(List<Certification>ViewBag.CategoryCertifications ?? new List<Certification>();

我在浏览页面中收到以下错误

unable to cast object of type'system.collection.generic.list''[<>f_Anonymous type 2f'2[system.string,system.string]]' to type 'system.collection.generic.list' '[cn.models.Certification]'

感谢您提前..

3 个答案:

答案 0 :(得分:0)

你能发送变量的数据类型吗?

建议:尝试在所需类型的models文件夹中创建自定义模型,并创建它的实例。然后将数据附加到模型并简单地将自定义对象传递给视图...

答案 1 :(得分:0)

由于您的班级认证包含Id ,Name, Summary

以下查询将返回包含name and summary

的类型
 ViewBag.CategoryCertifications=from pd in db.categories join od in db.categorycertifications on pd.id equals od.CategoryId join ct in db.certifications on od.certificationId equals ct.id select new { ct.Name,ct.Summary }).ToList();

所以两者都不兼容,所以在这里不能进行投射,而是你可以这样做,

而不是投射,即这一行

var categories=(List<Certification>ViewBag.CategoryCertifications ?? new List<Certification>();

直接在视图中使用ViewBag.CategoryCertifications。所以在运行时属性将绑定。确保您在视图中使用的属性名称。他们应该ct.Name,ct.Summary希望这会有所帮助。

答案 2 :(得分:0)

ViewBag.CategoryCertifications=from pd in db.categories join od in
db.categorycertifications on pd.id equals od.CategoryId join ct in db.certifications on
od.certificationId equals ct.id select new 
{
ct.Name,ct.Summary
}).ToList();

在上面的代码中,您将匿名列表返回到视图并尝试将其强制转换为认证列表,因此出现错误。

试试这个:

ViewBag.CategoryCertifications=from pd in db.categories join od in
db.categorycertifications on pd.id equals od.CategoryId join ct in db.certifications on
od.certificationId equals ct.id select new Certification
{
Name=ct.Name,Summary=ct.Summary
}).ToList();

在这种情况下,认证列表将传递给视图。