【发布时间】:2018-12-30 10:40:29
【问题描述】:
首先,我是 .Net MVC 的新手,如果有任何误解,我深表歉意。
我从 2 天以来一直在搜索这个问题,但很遗憾,我找不到答案。
我正在尝试在 linq 上进行连接查询,并希望通过列表查看。
提前谢谢你,
我的控制器;
var QueryTransferList = (from t in db.Transfers
.OrderBy(item => item.Date)
.ThenBy(item => item.TransferTime)
.ThenBy(item => item.GuestName)
join s in db.StatusDurums
on t.Status equals s.StatusName
where
t.Date >= todaysDate &&
t.Date <= todaysDate
select new { t, s }).ToList();
return View(QueryTransferList);
我的观点;
@model IEnumerable<NuvoTTMS.Models.Transfer>
@foreach (var item in Model)
{
<tr>
<td class="text-center">@Html.ActionLink(item.Id.ToString(), "Edit", new { id = item.Id })</td>
<td class="text-center">@Html.DisplayFor(modelItem => item.Date)</td>
<td>@Html.DisplayFor(modelItem => item.Reference)</td>
<td>@Html.DisplayFor(modelItem => item.GuestName)</td>
<td>@Html.DisplayFor(modelItem => item.From1)</td>
<td>@Html.DisplayFor(modelItem => item.To1)</td>
<td>@Html.DisplayFor(modelItem => item.Assistance)</td>
<td class="text-center">@Html.DisplayFor(modelItem => item.Pax)</td>
<td>@Html.DisplayFor(modelItem => item.FlightNumber)</td>
<td class="text-center">@Html.DisplayFor(modelItem => item.TransferTime)</td>
<td>@Html.DisplayFor(modelItem => item.TransferVehicle)</td>
<td>@Html.DisplayFor(modelItem => item.TransferSupplier)</td>
<td>@Html.DisplayFor(modelItem => item.DriverName)</td>
</tr>
}
错误代码;
The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[<>f__AnonymousType6`2[NuvoTTMS.Models.Transfer,NuvoTTMS.Models.StatusDurum]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[NuvoTTMS.Models.Transfer]'.
我做了什么;
- 我还指定了列名,例如
选择新的 { t.Assistance, s.StatusId }).ToList();
- 而且我使用“AsEnumerable()”而不是 .Tolist();
###Updated###
非常感谢您的快速回复。我只是跟着你的 cmets,它运作良好。
您可能会看到下面的代码,我想将所有列发送给查看。是否需要将所有列名一一写下,还是有其他方法可以做到?
var QueryTransferList = (from t in db.Transfers
.OrderBy(item => item.Date)
.ThenBy(item => item.TransferTime)
.ThenBy(item => item.GuestName)
join s in db.StatusDurums
on t.Status equals s.StatusName
where
t.Date >= todaysDate &&
t.Date <= todaysDate
select new NuvoTTMS.Models.TransferViewModel
{
Id = t.Id,
Date = t.Date,
Service = t.Service,
Nationality = t.Nationality,
Reference = t.Reference,
GuestName = t.GuestName,
From1 = t.From1,
To1 = t.To1,
Assistance = t.Assistance,
Pax = t.Pax,
FlightNumber = t.FlightNumber,
TransferTime = t.TransferTime,
TransferVehicle = t.TransferVehicle,
TransferSupplier = t.TransferSupplier,
Notes = t.Notes,
InvoiceCode = t.InvoiceCode,
InvoiceRate = t.InvoiceRate,
Status = t.Status,
DriverName = t.DriverName,
StatusId = s.StatusId,
StatusName = s.StatusName,
StatusColor = s.StatusColor
}).ToList();
还有我的最后一个问题,我将 Transfer 和 StatusDurum 模型组合到 TransferViewModel 如下。有什么方法可以实现 TransferViewModel 的 transfer 和 statusdurum 模型。
实际上,如果我在传输模型中进行任何更改,那么我需要在传输视图模型中进行,对吗?
public class TransferViewModel
{
public int Id { get; set; }
[Display(Name = "Date")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? Date { get; set; }
[Display(Name = "Transfer Type")]
public string Service { get; set; }
[Display(Name = "National")]
public string Nationality { get; set; }
[Display(Name = "Gta Reference")]
public string Reference { get; set; }
[Display(Name = "Guest Name")]
public string GuestName { get; set; }
[Display(Name = "From")]
public string From1 { get; set; }
[Display(Name = "To")]
public string To1 { get; set; }
[Display(Name = "Ass.")]
public string Assistance { get; set; }
[Display(Name = "Pax")]
public string Pax { get; set; }
[Display(Name = "Flight No")]
public string FlightNumber { get; set; }
[Display(Name = "Time")]
public string TransferTime { get; set; }
[Display(Name = "Vehicle")]
public string TransferVehicle { get; set; }
[Display(Name = "Supplier")]
public string TransferSupplier { get; set; }
[Display(Name = "Transfer Notes")]
public string Notes { get; set; }
[Display(Name = "Invoice Rate")]
public string InvoiceRate { get; set; }
[Display(Name = "Invoice Code")]
public string InvoiceCode { get; set; }
[Display(Name = "Status")]
public string Status { get; set; }
[Display(Name = "Driver Name")]
public string DriverName { get; set; }
public int StatusId { get; set; }
public string StatusName { get; set; }
public string StatusColor { get; set; }
【问题讨论】:
-
你需要viewmodel而不是动态类型,或者你可以在视图输入类型中标记为动态
标签: .net asp.net-mvc model-view-controller