【发布时间】:2015-11-03 17:31:09
【问题描述】:
我遇到了一个问题,默认模型绑定器拒绝绑定到我的对象,这是一个简单对象的 List<>。
班级:
public class ReferralHistoryDetail {
[Key]
public long Referral_Number { get; set; }
public Guid QuoteGuid { get; set; }
public byte ReferralTypeID { get; set; }
public string Referral_Type { get; set; }
public DateTime ReferralDateTime { get; set; }
public string ReferralComments { get; set; }
}
控制器定义:
[HttpPost]
public ActionResult Save(List<ReferralHistoryDetail> details) {
来自 Fiddler 的观点:
我在这里做错了什么?
这通过 EditorTemplate 以下列方式显示:
@using (Html.BeginForm("Save", "Home")) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div class="tab-content">
<div class="tab-pane fade in active form-horizontal" id="basic">
@Html.EditorFor(m => m.ReferralHistoryDetail)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
}
作为 NULL 的值是传递给控制器 POST 方法的值。默认模型绑定器无法绑定此。
【问题讨论】:
-
很可能是因为 HistoryDetail 与类名 ReferralHistoryDetail 不匹配。
-
您不需要 HistoryDetail 或 ReferralHistoryDetail。只需
name="[0].ReferralTypeID"等即可 -
我正在为这个模型使用 EditorTemplate,并通过 EditorFor() 显示它。 MVC 控制着其余部分。
-
您在视图中的
@model定义是什么? -
@model ReferralHistoryDetail ...这显示在来自父视图的编辑器模板中,父视图将这个 List 建模为一个名为 HistoryDetail 的属性,我认为这可能是这里的问题?由于类名不同,它不是映射吗? HTML 表单不涉及父级,它只涉及此子级列表。