我正在尝试通过 JQuery 将复杂的 ViewModel 对象获取到我的视图中$.getJSON
。但是,尽管它适用于简单对象,但当我的视图模型包含其他对象列表作为其中的一部分时,我的 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 类,并将其填充到 viewmodel 的FillCompanies()
方法中CompanyIndex
,我的 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”类型的对象时检测到循环引用。
我需要做一些特殊的事情来将复杂的对象从控制器传递到视图吗?有任何想法吗?