如何在asp.net中的ViewDataDictionary中修复模型类型的错误

时间:2017-11-30 15:39:34

标签: c# asp.net-mvc

我正在做一个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的新手,所以我不知道这个错误来自哪里。如果您需要更多代码,我可以加入。

0 个答案:

没有答案