c# - 试图让视图在 MVC 中使用视图模型
问题描述
我有一个从数据类中检索数据的 ViewModel。
然后,我更改了控制器 Index 方法,以便能够使用类似于此示例的 ViewModel:
namespace WebSite.Models.PassengerViewModels
{
public class PassengerViewModel
{
[Display(Name = "Passenger ID ")]
public int Id { get; set; }
[Display(Name = "Surname ")]
[Required]
public string Surname { get; set; }
[Display(Name = "First Name ")]
[Required]
public string FirstName { get; set; }
[Display(Name = "E-mail Address ")]
[Required]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
}
}
然后在乘客控制器中,我将索引更改为此。我尝试为姓氏和名字添加过滤系统:
public async Task<IActionResult> Index(string filter)
{
var passengerContext = from e in _context.Passengers
.Select(a => new PassengerViewModel
{
Id = a.Id,
FirstName = a.FirstName,
Surname = a.Surname,
Email = a.Email,
})
select e;
if (!String.IsNullOrEmpty(filter))
{
passengerContext = passengerContext.Where(e => e.FirstName.Contains(filter)).Where(e => e.Surname.Contains(filter));
}
return View(await _context.Passengers.ToListAsync());
}
然后在查看索引页面中,代码如下所示:
@model IEnumerable<WebSite.Models.PassengerViewModels.PassengerViewModel>
@{
ViewData["Title"] = "Index";
}
<h2>Index</h2>
<p>
<a asp-action="Create">Create New</a>
</p>
<form asp-controller="PassengersController" asp-action="Index">
<p>
Event: <input type="search" name="filter">
<input type="submit" value="Filter" />
</p>
</form>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Surname)
</th>
<th>
@Html.DisplayNameFor(model => model.FirstName)
</th>
<th>
@Html.DisplayNameFor(model => model.Email)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Surname)
</td>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
<a asp-action="Detail" asp-route-id="@item.Id">Detail</a>
</td>
</tr>
}
</tbody>
</table>
然后当我尝试进入该页面时,我收到了这个错误,我不确定它到底告诉了我什么:
InvalidOperationException:传递到 ViewDataDictionary 的模型项的类型为“System.Collections.Generic.List
1[WebSite.Data.Passenger]', but this ViewDataDictionary instance requires a model item of type System.Collections.Generic.IEnumerable
1[Website.Models.PassengerViewModels.PassengerViewModel]”。
解决方案
你的问题return
你应该更新你return
的这个
return View(await _context.Passengers.ToListAsync());
to
return View(passengerContext.ToList());
推荐阅读
- c++ - C++ OpenCV:屏蔽频域图像
- python-3.x - sklearn.impute.MissingIndicator ValueError:输入包含 NaN、无穷大或对于 dtype('float64')来说太大的值。:
- svg - SVG 文本可访问性
- c++ - 双重释放或损坏 C++
- atom-editor - 在 atom 中使用键盘在面板之间移动
- mongodb - 此基本设置忽略了猫鼬填充
- javascript - 尝试访问 Fortnite-API 时出现 UnhandledPromiseRejectionWarning?
- javascript - ES6 父类覆盖子原型
- google-apps-script - 如何在移动设备上禁用 Gmail 插件?
- yocto - 如何在 yocto AGL 中添加 pciutils 包?