我是MVC架构的新手,我有以下连接两个表的Controller: 我应该如何在视图中设置@ModelType以便引用q中的值? 我的项目名称是ECRM,我似乎无法得到VS2013承认什么,当我键入ECRM.Models 加入表格似乎给我带来的麻烦比我最初想的要多! ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我有以下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就可以访问所有项将更加方便。
我认为正确的声明是什么,或者我试图通过这种方式无法实现的声明?
您正在返回一个匿名对象,并且您的视图需要带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
来容纳Person
和Note
。
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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.