我有以下ASP.Net MVC控制器动作,该动作连接了2个表:

public ActionResult PersonNotes()
{
    var model = db.Notes
        .Join(db.People, p => p.NotesListId, n => n.NotesListId, 
            ((note, person) => new { note, person })).ToList();
    return View(model);
}

在我看来,我有以下模型声明:

@model IEnumerable<Tuple<Models.Note, Models.Person>>

我收到以下错误:

System.InvalidOperationException: The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[<>f__AnonymousTypef`2[Models.Note,Models.Person]]', but this dictionary requires a model item of type System.Collections.Generic.IEnumerable`1[System.Tuple`2[Models.Note,Models.Person]]'.

我意识到我可以在联接中使用ViewModel和Select(),但是无需创建ViewModel就可以访问所有项将更加方便。

我认为正确的声明是什么,或者我试图通过这种方式无法实现的声明?

#1楼 票数:5 已采纳

您正在返回一个匿名对象,并且您的视图需要带Tuple的模型。 匿名类型由编译器生成,并且在源代码级别不可用。

试着改变你的语句来创建IEnumerable<Tuple<Models.Note, Models.Person>>Tuple.Create

var model = db.Notes
    .Join(db.People, p => p.NotesListId, n => n.NotesListId, 
        ((note, person) => Tuple.Create(note, person))).ToList();

参见Tuple.Create

如果您正在使用Linq to Entities或Entity Framework,则需要将IQueryable迭代到Tuple或使用一个class

var model = db.Notes
    .Join(db.People, p => p.NotesListId, n => n.NotesListId, 
        ((note, person) => new { note, person }))
    .AsEnumerable()
    .Select(x => Tuple.Create(x.note, x.person))
    .ToList();

要么

创建一个class来容纳PersonNote

public class PersonNote
{
    public Person Person { get; set; }
    public Note Note { get; set; }
}

更改该语句以使用新的PersonNote

var model = db.Notes
    .Join(db.People, p => p.NotesListId, n => n.NotesListId, 
        ((note, person) => new PersonNote { Note = note, Person = person }))
    .ToList();

更改模型。

@model IEnumerable<PersonNote>

  ask by tr3v translate from so

未解决问题?本站智能推荐:

1回复

模型传递给局部视图

一直在搜索,但是找不到我要实现的目标的直接解决方案。 我已尝试根据需要添加尽可能多的内容,但这是一个非常大的项目,因此希望您能掌握要点。 概述:我有一个视图模型,其中包含多个对象列表。 我使用两个局部视图来控制每个对象列表,一个用于收集对象列表(保存在会话中),另一个用于将所述对象
3回复

发布传递给视图的相同模型

我有一个简单的帐户更新表单,该表单发布到Update()函数。 具有当前用户帐户信息的模型将传递到包含此表单的视图,因此将自动填写字段。 表格 每个属性都有备份,例如backupUsername ,这样我就可以在数据库中搜索旧属性并从中进行更新。 更新() 但是,当
2回复

将对象数组作为TempData []传递给视图

我想将一个post操作中的两个值返回到RedirectToAction的视图。 TempData[]似乎是理想的选项,因为数据仅用于在用户保存后显示成功消息。 我想在成功消息中显示用户刚保存的图像的小缩略图和已保存项目的标题。 目前我将所有数据作为new MvcHtmlString
3回复

如何将动作结果中的值传递给视图

我需要将模型属性从操作传递到视图,我的一些模型属性将由用户填充,而另一些则由我的代码填充。 这是我的模特 这是动作代码 用户将填写姓名,电子邮件和电话号码,我的操作代码将填写域,时间,pdfUrl,PageUrl 现在我需要将Domain,Time,pdfUrl和Pa
3回复

如何访问传递给视图的模型中的属性?

我将以下模型发送到我的视图。 在视图中,我不想为我的对象指定任何特定的类(因为我现在希望保持其灵活和有弹性)。 因此,@ Model显然是一个对象,因此没有url属性。 因此,错误。 附加信息:“对象”不包含“ URL”的定义 现在,我知道对象内部的东西具有url属
1回复

将类实例传递给所有视图

我有一个使用域身份验证的Asp.Net MVC应用程序,_Layout.cshtml文件包含对User.Identity.Name的调用,该调用在域环境上返回正确的域用户名。 我有一个可以存储个人详细信息的Person模型。 在家庭控制器中,我实例化该类并将其传递到我的视图中:
2回复

将两个查询传递给视图,没有GetEnumerator

我有一个由实体框架填充的预订类,我想针对表运行不同的查询并将它们返回到视图。 香港专业教育学院读过关于使用课程来梳理它们的问题,但是我很难让它工作...... 谢谢你的帮助 错误 foreach语句不能对'ITAPP.Models.Bookings'类型的变量进行操作,因为'
1回复

错误的类型传递给视图-ASP.NET MVC 5

我正在尝试创建适用于两种不同模型的视图。 但是我不断收到关于传递给错误类型的错误: 传递到字典中的模型项的类型为'System.Data.Entity.DynamicProxies.ApplicationUser_D1BDF9065CBD1B8BC24F5E69ACC3CAB19A6