Asp.net mvc 自定义查询赢得';不通过viewmodel传递到视图
我有一个自定义查询,希望通过viewmodel传递给视图。我可以将查询直接传递给视图,它也可以工作,但是当我尝试将查询传递给具有视图模型的视图时,会出现错误。我知道必须有一个简单的答案,但如果我能找到答案,我会被绞死 班级Asp.net mvc 自定义查询赢得';不通过viewmodel传递到视图,asp.net-mvc,entity-framework,linq,razor,Asp.net Mvc,Entity Framework,Linq,Razor,我有一个自定义查询,希望通过viewmodel传递给视图。我可以将查询直接传递给视图,它也可以工作,但是当我尝试将查询传递给具有视图模型的视图时,会出现错误。我知道必须有一个简单的答案,但如果我能找到答案,我会被绞死 班级 namespace TADSVer2_1.Models { public class TailNo { public string TailNos { get; set; } public string Base { get; set; }
namespace TADSVer2_1.Models
{
public class TailNo
{
public string TailNos { get; set; }
public string Base { get; set; }
public string ACType { get; set; }
}
}
查询查询工作正常,我得到了所需的数据
var test3 = _context.Aircrafts.Where(c => c.BaseId == 4).Include(c => c.ACType).Include(c => c.Base)
.Select(c => new TailNo {
TailNos = c.TailNumber,
ACType = c.ACType.Type,
Base = c.Base.Name }).ToList();
景色
@model IEnumerable<TADSVer2_1.ViewModels.AircraftViewModel>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<ul>
@foreach (var i in Model)
{
<li>
@i.TailNos " " @i.Base " " @i.ACType
</li>
}
</ul>
因此,我从视图中删除IEnumerable,得到以下错误:
foreach statement cannot operate on variables of type 'AircraftViewModel' because 'AircraftViewModel' does not contain a public instance definition for 'GetEnumerator'
因此,我在视图中替换了IEnumerable,并在viewmodel中尝试了此操作,结果出现了编译错误
public TailNo TailNo { get; set; }
Error CS1061 'AircraftViewModel' does not contain a definition for 'TailNos' and no accessible extension method 'TailNos' accepting a first argument of type 'AircraftViewModel' could be found (are you missing a using directive or an assembly reference?) TADSVer2_1 D:\Programing_ Examples\MVC_Examples\MVC Exercises\TADSVer2_1\TADSVer2_1\Views\Aircraft\Index.cshtml 12 Active
因此,我一直在研究如何让自定义查询使用viewmodel。感谢您的帮助。您正在浏览AircraftViewModel数据的IEnumerable,该数据随后具有TailNo的IEnumerable。您必须执行嵌套的foreach(以下示例):
@model IEnumerable
@{
ViewBag.Title=“Index”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
@foreach(模型中的var i)
{
@foreach(i.TailNo中的var tail)
{
-
@tail.TailNos”“@tail.Base”“@tail.ACType
}
}
试试这个:
@model TADSVer2_1.ViewModels.AircraftViewModel
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<ul>
@foreach (var i in Model.TailNo)
{
<li>
@i.TailNos " " @i.Base " " @i.ACType
</li>
}
</ul>
@model TADSVer2\u 1.ViewModels.AircraftViewModel
@{
ViewBag.Title=“Index”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
@foreach(模型中的var i.TailNo)
{
-
@i、 TailNos”“@i.Base”“@i.ACType
}
仍不工作。我现在收到错误消息:“传递到字典中的模型项的类型为'TADSVer2_1.ViewModels.AircraftViewModel',但此字典需要System.Collections.Generic.IEnumerable`1[TADSVer2_1.ViewModels.AircraftViewModel]类型的模型项”''。确保模型定义为:model IEnumerable-听起来像IEnumerable已被删除,并且在顶行的视图中传递单个项:@model IEnumerable,并且在ViewModel中,查询结果被分配给:public IEnumerable AircraftId{get;set;}当我编译时,在页面尝试打开之前,我不会得到任何错误。所以我被难住了。这是因为var test3是一个TailNo列表,因为您在查询后执行select操作吗?那么在你看来,它应该是可数的?如果是这种情况,在视图中更改它是唯一的事情,因为您的foreach应该进行工作I检查,它是一个TailNo列表,因为我可以在将foreach设置为视图模型之前对其使用foreach。我更改了视图,但它不起作用。我仍然收到错误消息:传入字典的模型项的类型为“TADSVer2_1.ViewModels.AircraftViewModel”,但此字典需要类型为“System.Collections.Generic.IEnumerable`1[TADSVer2_1.Models.TailNo]”的模型项。感谢所有的帮助,我希望我们能够解决这个问题,因为我需要使用ViewModel将列表发送到视图。非常感谢,这很有效。我现在知道我的大脑冻结了。我认为我遇到的问题是路径中有许多可枚举项,为了回答您的上一个问题,请检查它显示的test3:(new System.Collections.Generic.Mscorlib_CollectionDebugView(test3.Items[0])。ACType。再次感谢!!!!!
public TailNo TailNo { get; set; }
Error CS1061 'AircraftViewModel' does not contain a definition for 'TailNos' and no accessible extension method 'TailNos' accepting a first argument of type 'AircraftViewModel' could be found (are you missing a using directive or an assembly reference?) TADSVer2_1 D:\Programing_ Examples\MVC_Examples\MVC Exercises\TADSVer2_1\TADSVer2_1\Views\Aircraft\Index.cshtml 12 Active
@model IEnumerable<TADSVer2_1.ViewModels.AircraftViewModel>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<ul>
@foreach (var i in Model)
{
@foreach (var tail in i.TailNo)
{
<li>
@tail.TailNos " " @tail.Base " " @tail.ACType
</li>
}
}
</ul>
@model TADSVer2_1.ViewModels.AircraftViewModel
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<ul>
@foreach (var i in Model.TailNo)
{
<li>
@i.TailNos " " @i.Base " " @i.ACType
</li>
}
</ul>