首页 > 解决方案 > MVC 5 集合未映射到模型

问题描述

我以前做过这个,但是当我无法让它发挥作用时,我不得不更新我的知识。

我基本上是在创建一个复选框列表。我已经复制了本指南:https ://exceptionnotfound.net/simple-checkboxlist-in-asp-net-mvc/

我完全无法从 a 那里取回物品HttpPost,也不明白为什么。HTML 看起来不错,具有我预期的 id 和名称,“Checks_0__IsChecked”“Checks[0].IsChecked”等。

当一切都失败时,尝试隔离问题——所以我创建了一个全新的 Web 应用程序并复制了我的复选框模型、我的编辑器模板并创建了一个相同的“创建”场景——令我惊讶的是,它按预期工作

查看表单值 ( Request.Form),它包含相同的键/值对,并且模型已正确映射。

关于可能是什么问题或如何确定原因的任何建议?

复选框模型的编辑器模板:

@model CheckBoxViewModel

<div class="form-check">
    @Html.HiddenFor(model => model.Id)
    @Html.HiddenFor(model => model.IsDisabled)
    @if (Model.IsDisabled)
    {
        @Html.CheckBoxFor(model => model.IsChecked, new { @class = "form-check-input", @disabled = "disabled" })
    }
    else
    {
        @Html.CheckBoxFor(model => model.IsChecked, new { @class = "form-check-input" })
    }
    @Html.LabelFor(model => model.IsChecked, Model.Text, new { @class = "form-check-label" })
</div>

模型的编辑器模板:

@model ScheduledTriggerViewModel
@Html.EditorFor(model => model.Checks)

风景:

@model ScheduledTriggerViewModel

@{
    ViewBag.Title = "Create";
}

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.EditorForModel()
    <button type="submit">Create</button>
}

编辑 路由配置是相同的,除了首先放置的附加路由 (Debug/Logs/{year}/{month})。该路线似乎不是问题,因为该操作受到打击,并且其他表单值已正确映射。

我检查Request.Form动作方法中开头的值。动作签名是相同的,除了一个是async Task<ActionResult>,而另一个只是ActionResult

该表单包含名称为Checks[0].IsCheckedetc. 的所有复选框,最多为 count-1。

HTML 中没有一个复选框被禁用。

我还在测试项目中添加了 Autofac,以检查它是否以某种方式处理了模型绑定过程,但没有区别。

更新 我已经创建了一个新的控制器、一个新的模型和新的编辑器模板,除了模型名称之外,它们与原来的完全一样。

该模型是另一个模型的精确副本。

这个控制器/视图/编辑器模板按预期工作 - 但不是按预期工作,因为我确信问题仍然存在。

我改变了麻烦的控制器以使用新模型并且它工作......我不知道为什么,因为它们是相同的。我不必更改视图中的任何内容即可执行替换。

由于它们在内容上是相同的,所以我不知道可能是什么原因导致了这个问题。

标签: c#asp.netasp.net-mvc-5

解决方案


推荐阅读