jQuery   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery – Ajax json到MVC5控制器:传递包含集合的对象大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
伙计们,我在MVC4和MVC5上尝试过这个.

我需要将一个具有一些属性和集合的对象从客户端传递给控制器​​.

我已经在C#中定义了模型:

public enum RequestMode { ReadOnly = 0,Edit = 1}

public class DataRequest
{
    public int ProjectId { get; set; }
    public RequestMode Mode { get; set; }
    public List<PageRequest> PageRequests { get; set; }

    public DataRequest()
    {
        PageRequests = new List<PageRequest>();
    }
}

public class PageRequest
{
    public int Id { get; set; }
    public int PageCurrent { get; set; }
    public int RowCountPerPage { get; set; }
}

MVC控制器被定义为(仅使用它来设置断点来检查请求值):

[HttpPost]
public JsonResult Test(DataRequest request)
{
    return new JsonResult();
}

Index.cshtml客户端包含ajax调用

<script type="text/javascript">
    var RequestMode = { ReadOnly: 0,Edit: 1 };

    var dataRequest = { ProjectId: 17,Mode: RequestMode.Edit,PageRequests: new Array() };
    var pageRequest = { TableId: 3165,PageCurrent: 4,RowCountPerPage: 30 };
    dataRequest.PageRequests.push(pageRequest);

    $(document).ready(function () {
        $.ajax({
            data: dataRequest,type: 'POST',cache: false,url: '/Home/Test',success: function (data) {
            },fail: function (data) {

            }
        });

    });

</script>

我开始调试,页面加载,我的断点在控制器测试方法被击中.

在调试器中,请求对象显示为:
    模式:编辑
    PageRequests:Count = 1
    ProjectId:17

当我展开PageRequests集合属性时,我看到:
    {} Mvc5WebTest.Controllers.PageRequest
        Id:0
        PageCurrent:0
        RowsPerPage:0

我希望用我设置的值(即3165,4,30)填充PageRequest对象

使用fiddler,我看到完整的DataRequest对象正在变为正确的Json,但似乎MVC控制器无法将其转回C#对象.

作为一种解决方法,我可以修改客户端上的ajax调用
    var cdr = JSON.stringify(dataRequest);

$.ajax({
    dataType: 'json',type: 'GET',data: { jsonRequest: cdr },...

然后在控制器中

[HttpGet]
public ActionResult Test(string jsonRequest)
{
    var request = JsonConvert.DeserializeObject<DataRequest>(jsonRequest);
    return new JsonResult();
}

这有效,但我宁愿不将数据作为字符串传递.

任何人都可以了解正在发生的事情以及我需要做些什么来填充这个集合?

解决方法

因为您要发布JSON数据,所以必须使用JSON.stringify将对象转换为字符串并声明contentType:“application / json; charset = utf-8”

$(document).ready(function () {
    $.ajax({
        data: JSON.stringify(dataRequest),contentType: "application/json; charset=utf-8",success: function (data) {
        },fail: function (data) {

        }
});

我还注意到在C#代码中,您将PageRequest定义为

public class PageRequest
{
    public int Id { get; set; }
    public int PageCurrent { get; set; }
    public int RowCountPerPage { get; set; }
}

在js中,

var pageRequest = { TableId: 3165,RowCountPerPage: 30 };

C#中的Id与js中的TableId之间存在冲突.你必须使用其中一个.

大佬总结

以上是大佬教程为你收集整理的jquery – Ajax json到MVC5控制器:传递包含集合的对象全部内容,希望文章能够帮你解决jquery – Ajax json到MVC5控制器:传递包含集合的对象所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: