C# 返回局部视图时包含对象

C# 返回局部视图时包含对象,c#,jquery,.net,ajax,asp.net-mvc,C#,Jquery,.net,Ajax,Asp.net Mvc,我试图让局部视图在遍历集合时显示对象名称。当我刷新原始页面时,这是没有问题的,但是一旦我发布AJAX帖子并尝试将新对象返回到局部视图,它就找不到特定的对象 我在FeeTypes对象上得到了一个null对象错误,它应该作为members.Fees(whateverno.FeeTypesG)包含在members对象中 另外,ajaxpost不会在成功时刷新div,因为它永远不会恢复成功(或者我做错了)。注意:它仍然会将所有内容正确地发布到数据库,并保存良好 模型 public class Membe

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

我在FeeTypes对象上得到了一个null对象错误,它应该作为members.Fees(whateverno.FeeTypesG)包含在members对象中

另外,ajaxpost不会在成功时刷新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; }



}
阿贾克斯邮报

        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>
@使用AccPortal.Models
@模型AccPortal.Models.Members
费用
@LabelFor(model=>model.Fees.First().FeeDate)
@Html.LabelFor(model=>model.Fees.First().feecurrence)
@Html.LabelFor(model=>model.Fees.First().FeeTypesId)
@LabelFor(model=>model.Fees.First().FeeStatus)
@Html.LabelFor(model=>model.Fees.First().feeaumount)
@{int i=0;}
@foreach(模型费用中的var项目)
{
@Html.HiddenFor(model=>model.Fees.ElementAt(i).FeeNo,新的{@class=“md-fee-value”,name=“md-fee-id”,data_-type=“testid”,id=“testid”})
@格式(“{0:d}”,item.FeeDate)
@item.feeCurrence.GetDisplayName()
//下一行找不到FEETYPES时出错
@item.FeeType.FeeTypeName
@项目.状态
@项目.金额
i++;
}

顶层视图

@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>
@使用AccPortal.Models
@使用Newtonsoft.Json
@模型AccPortal.Models.Members
@{
ViewBag.Title=“详细信息”;
@style.Render(“~/Content/jqueryui”)
}
细节
成员详情

@Html.Partial(“\u MemberDetails”)
问题最终在于延迟加载

通过添加,我可以获得重新填充绑定成员的费用。Fees.FeeType

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

您已经发布了很多不相关的代码(我们只需要查看相关的详细信息,而不是每个模型中的evrey属性等),并且您不能使用
foreach
循环为集合生成表单控件(请参阅)您将
Fees
分配给
ViewBag
属性,而不是分配给您的
members
模型。这很好。我会将表单控件更改为binding。既然费用在members中,那么会员模型中怎么不包括费用呢?这一切都很好(除了ajax刷新)如果它是在一个父视图中完成的,但是添加了部分视图,它就不再工作了。对不起,我不会(我怀疑其他人也不会)费力阅读所有这些代码-请参阅
        members = db.Members.Find(fees.MemberNo);
        members.Fees = db.Fees.Include(x => x.FeeType).Where(x => x.Members.MemberNo.Equals(x.MemberNo)).ToList();