加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

.net – 如何通过Ajax获取请求从控制器获取复杂对象?

发布时间:2020-12-16 02:45:33 所属栏目:百科 来源:网络整理
导读:我试图通过 JQuery $.getJSON将复杂的ViewModel对象提取到我的视图中.但是,虽然它适用于简单对象,但当我的viewmodel包含其他对象列表作为其一部分时,我的Ajax请求将停止工作. 这是我获取数据的方式, $.getJSON('/Company/GetCompanies',function(data) { vie
我试图通过 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’时,这是错误.

A circular reference was detected while serializing an object of type ‘CompanyManagement.Models.CompanyEmail’.

我是否需要做一些特殊的事情来将复杂的对象从控制器传递到视图?有任何想法吗?

解决方法

Do i need to do something special to pass complex objects from controller to view ?

是的,您应该使用视图模型.您不能JSON序列化对象层次结构,这些对象层次结构包含它们之间的循环引用.如果您希望JSON序列化模型并通过网络发送,则必须打破这些循环引用. JSON序列化格式根本不支持此功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读