.net - 如何通过 Ajax get 请求从 Controller 获取复杂对象以进行查看?

标签 .net asp.net-mvc entity-framework jquery

我正在尝试通过 JQuery $.getJSON 将复杂的 ViewModel 对象获取到我的 View 。但是,尽管它适用于简单对象,但当我的 View 模型包含其他对象列表作为其一部分时,我的 Ajax 请求将停止工作。

这就是我获取数据的方式,

$.getJSON('/Company/GetCompanies', function(data) { 
    viewModel.model = ko.mapping.fromJS(data)
    ko.applyBindings(viewModel)
});

这是工作 View 模型,

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 View 模型的 FillCompanies() 方法中,我的 ajax get 请求停止工作。

顺便说一句,这是我的 Controller ,在两种情况下它都会返回正确的数据,但是当我添加复杂对象时,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')
});

例如,当没有复杂对象时,警报正在工作,但当我将对象添加到 View 模型时,警报就会停止工作。

<小时/>

编辑2

这是我从浏览器而不是 ajax 调用“Company/GetCompanies”时出现的错误。

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

<小时/>

我需要做一些特殊的事情来将复杂的对象从 Controller 传递到 View 吗?有什么想法吗?

最佳答案

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

是的,您应该使用 View 模型。您无法使用 JSON 序列化对象层次结构,因为对象层次结构之间包含循环引用。如果您希望能够以 JSON 序列化您的模型并通过网络发送它,则必须打破这些循环引用。 JSON 序列化格式根本不支持这一点。

关于.net - 如何通过 Ajax get 请求从 Controller 获取复杂对象以进行查看?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11340442/

相关文章:

.net - 为什么 System.Net.Mail 在 System.Web.Mail 工作的地方失败

c# - 从 UserNamePasswordValidator 到 Principal 的变量

c# - 如何消除接口(interface)之间的重复

c# - 从 C# 调用 Python 应用程序/脚本

javascript - 将文件从客户端上传到 Azure Blob 存储 | MVC

c# - DateTime 到 Datetime2

c# - 使用 XmlDocument 读取 XML 属性

c# - asp.net mvc Azure 云服务,我应该使用 TempData 还是 Sessions 来保存一些用户信息或其他信息

c# - 如何避免“"The name ' ConfigurationManager'在当前上下文中不存在”错误?

c# - EF 检索数据时出错 : wrong table name in SQL