【发布时间】:2012-07-05 08:22:35
【问题描述】:
我正在尝试通过 JQuery $.getJSON 将复杂的 ViewModel 对象提取到我的视图中。然而,虽然它适用于简单对象,但当我的视图模型包含其他对象列表作为其中的一部分时,我的 Ajax 请求将停止工作。
这就是我获取数据的方式,
$.getJSON('/Company/GetCompanies', function(data) {
viewModel.model = ko.mapping.fromJS(data)
ko.applyBindings(viewModel)
});
这是工作视图模型,
public class CompanyIndex
{
public IList<CompanyWithDetail> Companies { get; set; }
public void FillCompanies()
{
UnitOfWork unitOfWork = new UnitOfWork();
unitOfWork.CompanyRepository.SetProxy(false);
var CompanyFromDB = unitOfWork.CompanyRepository.GetCompanyWithDetails();
Companies = new List<CompanyWithDetail>();
foreach (Company company in CompanyFromDB)
{
CompanyWithDetail newCompany = new CompanyWithDetail();
newCompany.CompanyName = company.CompanyName;
Companies.Add(newCompany);
}
unitOfWork.Dispose();
}
}
这是 CompanWithDetail 类,
// For sake of demonstration it only contains name
public class CompanyWithDetail
{
public string CompanyName { get; set; }
}
这工作正常。但是,当我添加
public IList<CompanyFaxNumber> FaxNumber { get; set; }
这个属性给CompanyWithDetail类,并填入CompanyIndexviewmodel的FillCompanies()方法,我的ajax get请求停止工作。
这是我的控制器顺便说一句,在这两种情况下它都会返回正确的数据,但是当我添加复杂对象时 jquery $.getJSON 没有收到。
public ActionResult GetCompanies()
{
var model = new CompanyIndex();
model.FillCompanies();
return Json(model ,JsonRequestBehavior.AllowGet);
}
编辑 1:
说getJSON没有收到数据,是指函数体没有被执行。
$.getJSON('/Company/GetCompanies', function(data) {
alert('test')
});
例如,警报在没有复杂对象时工作,但当我将对象添加到视图模型时它停止工作。
编辑 2
这是我从浏览器而不是 ajax 调用“Company/GetCompanies”时的错误。
在序列化“CompanyManagement.Models.CompanyEmail”类型的对象时检测到循环引用。
我需要做一些特殊的事情来将复杂的对象从控制器传递到视图吗?有什么想法吗?
【问题讨论】:
-
所以您想返回 CompanyWithDetails 和所有相关的 CompanyFaxNumbers? CompanyFaxNumber 是实体吗?它是否有对 Company 或 CompanyWithDetail 的反向引用?
-
是的,它确实有对公司的外键引用。我更新了我的问题。感谢您的评论。
标签: .net asp.net-mvc entity-framework jquery