我试图通过JQuery的$.getJSON
方法将一个复杂的ViewModel对象传递到我的视图中。然而,尽管对于简单对象它可以正常工作,但是当我的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类中,并在CompanyIndex视图模型的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 当我从浏览器调用“Company/GetCompanies”而不是ajax时,出现以下错误:
在序列化类型为'CompanyManagement.Models.CompanyEmail'的对象时检测到循环引用。
我需要做些特殊的事情来将控制器中的复杂对象传递到视图吗?有什么想法吗?