返回分部视图时包括对象



我正在尝试让我的部分视图在循环访问集合时显示对象名称。当我刷新原始页面时,这没有问题,但是一旦我执行 AJAX 帖子并尝试将新对象返回到部分视图,它就找不到特定的对象。

我在 FeeTypes 对象上收到一个空对象错误,该错误应作为 Members.Fees(无论如何(包含在成员对象中。费用类型G

此外,ajax 帖子不会在成功时刷新div,因为它永远不会获得成功(或者我做错了( 注意:它仍然将所有内容正确发布到数据库并保存完好。

模型

public class Members
{
    [Key]
    public int MemberNo { get; set; }
    [Display(Name = "Member Fees")]
    public virtual ICollection<Fees> Fees { get; set; }

}    


public class Fees
{
    [Key]
    public int FeeNo { get; set; }
    public virtual FeeTypes FeeType { get; set; }
    [Display(Name = "Fee Type")]
    public int FeeTypesId { get; set; }
    [Display(Name = "Frequency of Fee")]
    public FeeOccurence FeeOccurence { get; set; }
    [Display(Name = "Fee Amount")]
    public float FeeAmount { get; set; }
    [Display(Name = "Fee Status")]
    public FeeStatus FeeStatus { get; set; }
    [Display(Name = "Date received (for billing)")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime? FeeDate { get; set; }
    public virtual Members Members { get; set; }
    public int MemberNo { get; set; }
}
public class FeeTypes
{
    public int Id { get; set; }
    [Display(Name = "Fee Name")]
    public string FeeTypeName { get; set; }

}

控制器操作

    public ActionResult AddFees(Fees fees)
    {
        string result;
        Members members = db.Members.Find(fees.MemberNo);
        ViewBag.Fees = db.Fees
        .Include(x => x.FeeType)
        .Where(x => x.Members.MemberNo.Equals(x.MemberNo));
        ViewBag.FeeTypesId = new SelectList(db.FeeTypes, "Id", "FeeTypeName");
        if (ModelState.IsValid)
        {
            db.Fees.Add(fees);
            db.SaveChanges();
            return PartialView("~/Views/Members/_MemberDetails.cshtml", members);
        }
        ViewBag.MemberNo = new SelectList(db.Members, "MemberNo", "FirstName", fees.MemberNo);
        result = "Something went wrong!";
        return Json(result, JsonRequestBehavior.AllowGet);
    }

阿贾克斯邮政

        saveBtn.click(function () {
            var token = $('[name=__RequestVerificationToken]').val();
            var postData = {
                __RequestVerificationToken: token,
                FeeOccurence: feeOccField.val(),
                FeeAmount: amountField.val(),
                FeeStatus: statusField.val(),
                FeeTypesId: typeField.val(),
                FeeDate: dateField.val(),
                MemberNo: memberNo
            };
            $.ajax({
                url: '/Members/AddFees',
                type: 'POST',
                data: postData,
                success: function (members) {
                    alert(result);
                    $("#details").html(members);
                },
                error: function (result) {
                    alert(result);
                },
                traditional: true
            });

部分视图

    @using AccPortal.Models
    @model AccPortal.Models.Members
        <h5 class="md-fees-title">Fees</h5>
        <table cellpadding="0" cellspacing="0" class="md-fees-table">
            <thead>

                <tr>
                    <th>@Html.LabelFor(model => model.Fees.First().FeeDate)</th>
                    <th>@Html.LabelFor(model => model.Fees.First().FeeOccurence)</th>
                    <th>@Html.LabelFor(model => model.Fees.First().FeeTypesId)</th>
                    <th>@Html.LabelFor(model => model.Fees.First().FeeStatus)</th>
                    <th>@Html.LabelFor(model => model.Fees.First().FeeAmount)</th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                @{ int i = 0; }
                @foreach (var item in Model.Fees)
                {
                    <tr data-id="@i">
                        @Html.HiddenFor(model => model.Fees.ElementAt(i).FeeNo, new { @class = "md-fee-value", name = "md-fee-id", data_type = "testid", id = "testid" })
                        <td class="md-fee-value" data-type="date">@String.Format("{0:d}", item.FeeDate)</td>
                        <td class="md-fee-value" data-type="occ">@item.FeeOccurence.GetDisplayName()</td>
//ERROR HAPPENS ON THE NEXT LINE WHEN IT CANT FIND FEETYPES
                        <td class="md-fee-value" data-type="type">@item.FeeType.FeeTypeName</td>
                        <td class="md-fee-value" data-type="status">@item.FeeStatus</td>
                        <td class="md-fee-value" data-type="amount">@item.FeeAmount</td>
                        <td>
                            <button type="button" class="md-button md-button--edit" title="edit">
                                <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
                            </button>
                            <button type="button" class="md-button md-button--remove" title="remove">
                                <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
                            </button>
                        </td>
                    </tr>
                    i++;
                }

            </tbody>

顶级视图

@using AccPortal.Models
@using Newtonsoft.Json
@model AccPortal.Models.Members
@{
    ViewBag.Title = "Details";
    @Styles.Render("~/Content/jqueryui")
}


<h2>Details</h2>
<div>
    <h4>Members Details</h4>
<hr />
</div>
<div class="row">
    <div class="col-md-7 md-fees" id ="details">
        @Html.Partial("_MemberDetails")
    </div>
</div>

问题最终出在延迟加载上。

我能够通过添加来获得费用以重新填充绑定的会员.费用.费用类型

        members = db.Members.Find(fees.MemberNo);
        members.Fees = db.Fees.Include(x => x.FeeType).Where(x => x.Members.MemberNo.Equals(x.MemberNo)).ToList();

最新更新