我以前已经做过,但是当我无法使它起作用时,必须重新整理我的知识。
我基本上是在创建复选框列表。我转载了本指南:https://exceptionnotfound.net/simple-checkboxlist-in-asp-net-mvc/
我完全无法从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})位于第一位。由于操作被击中,并且似乎正确映射了其他表单值,因此路线似乎不是问题。
我首先在action方法内部检查Request.Form
值。动作签名是相同的,除了一个是async Task<ActionResult>
而另一个是ActionResult
该表单包含名称为Checks[0].IsChecked
等的所有复选框,最多为count-1。
HTML中所有复选框均未禁用。
我还已经将Autofac添加到测试项目中,以检查它是否以某种方式处理了模型绑定过程,但这没什么区别。
更新 我创建了一个新的控制器,一个新的模型和新的编辑器模板,除了模型名称外,它们与原始模板完全相同。
该模型是其他模型的精确副本。
此控制器/视图/编辑器模板按预期工作,但不按预期工作,因为我确定问题仍然存在。
我将麻烦的控制器更改为使用新模型,并且它起作用了……我不知道为什么,因为它们是相同的。我不必更改视图中的任何内容即可执行替换。
由于它们的内容相同,所以我对造成此问题的原因一无所知。