列表与模型数据的绑定
List Binding with model data
所以我有一个要提交的表单,我可以获取要绑定的列表或模型,但不能同时获取两者。我怀疑这与模型活页夹有关。
HTML
@using (Html.BeginForm("Index", "Home", FormMethod.Post)){
@Html.AntiForgeryToken()
<div class="TransferHeader">
<div>
@Html.LabelFor(model => model.tranRequestedBy)
@Html.EditorFor(model => model.tranRequestedBy, new { @Name = "h.tranRequestedBy" })
</div>
<div>
@Html.LabelFor(model => model.tranNotes)
@Html.EditorFor(model => model.tranNotes, new { @Name = "h.tranNotes" })
</div>
<input name="h.TransfersDetail.Index" id="detIndex" type="hidden" value="c3a3f7dd-41bb-4b95-b2a6-ab5125868adb">
<input name="h.TransfersDetail[c3a3f7dd-41bb-4b95-b2a6-ab5125868adb].detToolCode" id="detToolCode" type="hidden" value="1234">
</div>
}
控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(TransfersHeader h)
{
return View();
}
型号Class:
public virtual ICollection<TransfersDetail> TransfersDetail { get; set; }
public string tranRequestedBy { get; set; }
public string tranNotes { get; set; }
两个底部输入是通过 AJAX 调用 add 方法生成的,如果它们不存在会发生什么情况,两个 HTML 辅助编辑器将出现在模型中,但如果它们存在确实存在,只会出现转移详细信息列表。
我可以做些什么来确保所有数据都进入模型吗?
不清楚您是如何生成这些输入的,但是 name
属性不正确。您的模型不包含名为 h
的集合 属性,但它确实包含一个名为 TransfersDetail
的集合,因此您的输入需要
<input name="TransfersDetail.Index" type="hidden" value="c3a3f7dd-41bb-4b95-b2a6-ab5125868adb">
<input name="TransfersDetail[c3a3f7dd-41bb-4b95-b2a6-ab5125868adb].detToolCode" type="hidden" value="1234">
也不清楚为什么要添加 id
属性(如果您引用 jQuery 中的集合项,最好使用 class 名称和相对选择器),但是id
您的使用没有索引器,表明您将生成重复的 id
无效 html 属性(并且 jQuery 选择器在任何情况下都不起作用)
所以我有一个要提交的表单,我可以获取要绑定的列表或模型,但不能同时获取两者。我怀疑这与模型活页夹有关。
HTML
@using (Html.BeginForm("Index", "Home", FormMethod.Post)){
@Html.AntiForgeryToken()
<div class="TransferHeader">
<div>
@Html.LabelFor(model => model.tranRequestedBy)
@Html.EditorFor(model => model.tranRequestedBy, new { @Name = "h.tranRequestedBy" })
</div>
<div>
@Html.LabelFor(model => model.tranNotes)
@Html.EditorFor(model => model.tranNotes, new { @Name = "h.tranNotes" })
</div>
<input name="h.TransfersDetail.Index" id="detIndex" type="hidden" value="c3a3f7dd-41bb-4b95-b2a6-ab5125868adb">
<input name="h.TransfersDetail[c3a3f7dd-41bb-4b95-b2a6-ab5125868adb].detToolCode" id="detToolCode" type="hidden" value="1234">
</div>
}
控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(TransfersHeader h)
{
return View();
}
型号Class:
public virtual ICollection<TransfersDetail> TransfersDetail { get; set; }
public string tranRequestedBy { get; set; }
public string tranNotes { get; set; }
两个底部输入是通过 AJAX 调用 add 方法生成的,如果它们不存在会发生什么情况,两个 HTML 辅助编辑器将出现在模型中,但如果它们存在确实存在,只会出现转移详细信息列表。 我可以做些什么来确保所有数据都进入模型吗?
不清楚您是如何生成这些输入的,但是 name
属性不正确。您的模型不包含名为 h
的集合 属性,但它确实包含一个名为 TransfersDetail
的集合,因此您的输入需要
<input name="TransfersDetail.Index" type="hidden" value="c3a3f7dd-41bb-4b95-b2a6-ab5125868adb">
<input name="TransfersDetail[c3a3f7dd-41bb-4b95-b2a6-ab5125868adb].detToolCode" type="hidden" value="1234">
也不清楚为什么要添加 id
属性(如果您引用 jQuery 中的集合项,最好使用 class 名称和相对选择器),但是id
您的使用没有索引器,表明您将生成重复的 id
无效 html 属性(并且 jQuery 选择器在任何情况下都不起作用)