我正在做一个asp.net应用程序而且我有一个我无法解决的错误。我尝试将视图(索引)中的日期发送到列表上的另一个视图(selectServices)。但是在这个动作之后我得到了这个错误:
InvalidOperationException:传递给ViewDataDictionary的模型项的类型为' System.Collections.Generic.List' 1 [AppForSPA.Models.Service]',但此ViewDataDictionary实例需要一个模型项类型' System.Collections.Generic.IEnumerable' 1 [AppForSPA.Models.Reservation]'。
所以我认为这是因为我在selectServices视图中写了@model IEnumerable<AppForSPA.Models.Service>
而不是@model IEnumerable<AppForSPA.Models.Reservation>
。我改变了这个但是我仍然有同样的错误。
所以这是我的代码,首先是我的预订控制器,带有索引get和post方法:
// GET: Reservations/Index
public IActionResult Index() {
return View();
}
// POST: Reservations/Index
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Index(CreateReservationViewModel model) {
Reservation reservation;
if (ModelState.IsValid) {
reservation = new Reservation() { StartingDate = model.StartingDate };
_context.Add(reservation);
await _context.SaveChangesAsync();
return RedirectToAction("SelectServices");
}
return View(model);
}
然后我的预订/索引视图:
@model AppForSPA.Models.ReservationViewModels.CreateReservationViewModel
@{
ViewData["Title"] = "Index";
}
<h2>New reservation</h2>
<form asp-action="SelectServices" >
<div class="form-horizontal">
<h4>Choose Date</h4>
<hr />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="StartingDate" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="StartingDate" type="date" class="form-control" />
<span asp-validation-for="StartingDate" class="text-danger" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Select" class="btn btn-default" />
</div>
</div>
</div>
</form>
<div>
<a asp-action="Index">Back to List</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
所以,从这里我发送了一个用户需要选择的日期,它必须在下一个视图中列出&#34; SelectServices&#34;。这是我的reservationsController的动作SelectServices的GET方法:
// GET: Reservations/SelectServices
public async Task<IActionResult> SelectServices() {
return View(await _context.Reservation.ToListAsync());
}
然后查看selectServices:
@model IEnumerable<AppForSPA.Models.Reservation>
@{
ViewData["Title"] = "SelectServices";
}
<h2>Select Services</h2>
<div asp-validation-summary="All" class="text-danger"></div>
<form asp-action="SelectServices" method="post">
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.StartingDate)
</th>
<th>
Select Service
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.StartingDate)
</td>
<td>
<input type="checkbox" name="IdsToAdd" value="@item.ReservationID">
</td>
</tr>
}
}
</tbody>
</table>
</form>
所以也许我忘记了什么?我是asp.net的新手,所以我不知道这个错误来自哪里。如果您需要更多代码,我可以加入。