【问题标题】:MVC default model binder returns Null objectMVC 默认模型绑定器返回 Null 对象
【发布时间】: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 方法的值。默认模型绑定器无法绑定此。

【问题讨论】:

  • 很可能是因为 HistoryDe​​tail 与类名 ReferralHistoryDe​​tail 不匹配。
  • 您不需要 HistoryDe​​tail 或 ReferralHistoryDe​​tail。只需name="[0].ReferralTypeID" 等即可
  • 我正在为这个模型使用 EditorTemplate,并通过 EditorFor() 显示它。 MVC 控制着其余部分。
  • 您在视图中的@model 定义是什么?
  • @model ReferralHistoryDe​​tail ...这显示在来自父视图的编辑器模板中,父视图将这个 List 建模为一个名为 HistoryDe​​tail 的属性,我认为这可能是这里的问题?由于类名不同,它不是映射吗? HTML 表单不涉及父级,它只涉及此子级列表。

标签: asp.net-mvc asp.net-mvc-5


【解决方案1】:

我解决了这个问题。

问题是Html.BeginForm() 在主视图中,但它只发回来自EditorFor() 的内容。

我必须更改我的控制器以接收主视图的对象,而不是 EditorFor() 正在处理的对象,因为 Html.BeginForm() 存在于主视图中。

【讨论】:

    猜你喜欢
    • 2011-11-22
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多