我有一个模型而不是包含可以修改的项目集合.
我使用Partial View渲染集合,而Partial View又使用EditorForModel为集合中的每个元素输出HTML.
@model Footy.Models.EventModel
<h2>@Model.Team1Name vs @Model.Team2Name</h2>
@using (Html.BeginForm("Index", "Event"))
{
@Html.HiddenFor(m => m.EventID)
<h1>
Team 1 Squad</h1>
@Html.Partial("EventPlayers", Model.Team1Players);
<h1>
Team 2 Squad</h1>
Html.RenderPartial("EventPlayers", Model.Team2Players);
<input type="submit" value="Confirm Changes" />
}
Run Code Online (Sandbox Code Playgroud)
局部视图
@model IEnumerable<Footy.Models.PlayerModel>
@Html.EditorForModel()
Run Code Online (Sandbox Code Playgroud)
PlayerModel查看
@model Footy.Models.PlayerModel
@Model.PlayerName @Html.DropDownListFor(p => p.ParticipationStatusID, new SelectList(Model.ParticipationTypes, "Key", "Value"))
Run Code Online (Sandbox Code Playgroud)
这一切都正确呈现,但是当用户单击输入时,控制器方法不会传递模型中的子集合,例如Model.Team1Players为null
我错过了什么?
编辑:生成的HTML是
<form action="/Footy/Event/Index/1" method="post"><input data-val="true" data-val-number="The field EventID must be a number." data-val-required="The EventID field is required." id="EventID" name="EventID" type="hidden" value="1" />
<h1>Team 1 Squad</h1>
si <select data-val="true" data-val-number="The field ParticipationStatusID must be a number." data-val-required="The ParticipationStatusID field is required." name="[0].ParticipationStatusID"><option value="1">Team</option>
<option value="2">Sub</option>
<option value="3">Squad</option>
</select>
<h1>Team 2 Squad</h1>
<input type="submit" value="Confirm Changes" />
</form>
Run Code Online (Sandbox Code Playgroud)
谢谢
我认为它与这个问题有关,它还没有答案:从Ajax呈现的部分视图将数据发回控制器
如果检查渲染的源,是否可以检查渲染的子模型输入的名称和ID是否与模型层次结构相对应?
我相信您需要EditorFor
为了让儿童模型正确"命名空间".
所以在EventModel视图中,使用以下内容:
@Html.EditorFor(m => m.Team1Players, "EventPlayers")
Run Code Online (Sandbox Code Playgroud)
不过我不确定.我在MVC框架方面遇到了类似的问题.