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