JQuery を使用して、複雑な ViewModel オブジェクトをビューにフェッチしようとしています$.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 クラスに追加し、ビューモデル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' のオブジェクトをシリアル化中に、循環参照が検出されました。
複雑なオブジェクトをコントローラーからビューに渡すために何か特別なことをする必要がありますか? 何か案は?