Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 自定义查询赢得';不通过viewmodel传递到视图_Asp.net Mvc_Entity Framework_Linq_Razor - Fatal编程技术网

Asp.net mvc 自定义查询赢得';不通过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; }

我有一个自定义查询,希望通过viewmodel传递给视图。我可以将查询直接传递给视图,它也可以工作,但是当我尝试将查询传递给具有视图模型的视图时,会出现错误。我知道必须有一个简单的答案,但如果我能找到答案,我会被绞死

班级

 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>