.net – 如何通过Ajax获取请求从控制器获取复杂对象?
我试图通过
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 viewmodel的FillCompanies()方法中填充,我的ajax get请求停止工作. 这是我的控制器btw,在这两种情况下它都返回正确的数据,但是当我添加复杂对象时,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') }); 例如,当没有复杂对象时警报正在工作,但是当我向viewmodel添加对象时它停止工作. 编辑2 当我从浏览器而不是ajax调用’Company / GetCompanies’时,这是错误.
我是否需要做一些特殊的事情来将复杂的对象从控制器传递到视图?有任何想法吗? 解决方法
是的,您应该使用视图模型.您不能JSON序列化对象层次结构,这些对象层次结构包含它们之间的循环引用.如果您希望JSON序列化模型并通过网络发送,则必须打破这些循环引用. JSON序列化格式根本不支持此功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |