【问题标题】:List Binding with model data列表与模型数据绑定
【发布时间】:2016-03-22 15:33:20
【问题描述】:

所以我有一个要提交的表单,我可以获取要绑定的列表或模型,但不能同时获取两者。我怀疑这与模型绑定器有关。

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();
}

模型类:

public virtual ICollection<TransfersDetail> TransfersDetail { get; set; }
public string tranRequestedBy { get; set; }
public string tranNotes { get; set; }

底部的两个输入是从对 add 方法的 AJAX 调用生成的,如果它们不存在,两个 HTML 帮助编辑器将进入模型,但如果它们存在,则只会出现传输详细信息列表。 我可以做些什么来确保所有数据都进入模型?

【问题讨论】:

    标签: asp.net-mvc model-binding


    【解决方案1】:

    不清楚您是如何生成这些输入的,但 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 中引用集合项,最好使用类名和相对选择器),但是您使用的 id 没有索引器建议您将生成重复的 id 属性,这是无效的 html(并且 jQuery 选择器在任何情况下都不起作用)

    【讨论】:

    • 谢谢,这行得通,我是按照控制器对 h 的期望来命名列表项的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    相关资源
    最近更新 更多