【问题标题】:How To Send Sequence of Specific Object To Mvc Core Action through jquery ajax如何通过 jquery ajax 将特定对象的序列发送到 Mvc Core Action
【发布时间】:2019-09-30 05:09:09
【问题描述】:

我创建了一个负责创建和发送 json 的函数:

function Send(op) {
    var tr = $(op).parents('tr');
        var item = [];

        $(tr).find("td").each(function () {
            item.push($(this).find("input").prop("name") + '":' + '"' + $(this).find("input").val());
        });
        var myJsonString = JSON.stringify(item);

        $.ajax({
            url: '/Home/Edit',
            data: myJsonString,
            type:'post',
            contentType: 'application/json; charset=utf-8',
            cache: false,
            success: function () {
                alert('send is okay')
            }
        });
}

到一个 IActionResult :

   [HttpPost]
    public ActionResult Edit([FromBody]Hazine hazine)
    {
        return View();
    }

但它(编辑操作)无法从 jquery 获取对象。 所以这个动作成功调用了,但是hazine为空!

我从 console.log 获得的一个 json 是:

["id\":\"4","undefined\":\"undefined","undefined\":\"undefined","HazineType1\":\"1","HazineType2\":\"1","SendDate\":\"5","ProjectId\":\"1","Mablagh\":\"1","MablaghPaid\":\"1","HazineDate\":\"1","HazineDateLong\":\"1","HazineTitle\":\"11111","HazineComment\":\"1","ForoshgahName\":\"1","PayLastDate\":\"1","PayDateLong\":\"111111111","UniqueId\":\"1111","SaveDate\":\"8888","SaveDateLong\":\"888","SendDate\":\"5","SendDateLong\":\"5"]

怎么了?

【问题讨论】:

    标签: jquery ajax asp.net-core-mvc jquery-ajaxq


    【解决方案1】:

    FromBody向Controller发送对象,json字符串应该映射参数。

    对于您的操作,它接受一个对象,但对于您的 json,您正在发送一个集合对象。

    试试下面的方法:

    function Send(op) {
        var tr = $(op).closest('tr');
        var item = {};
    
        $(tr).find("td").each(function () {
            item[$(this).find("input").prop("name")] = $(this).find("input").val();                    
            });
            var myJsonString = JSON.stringify(item);
        console.log(myJsonString);
            $.ajax({
                url: '/Home/Edit',
                data: myJsonString,
                type:'post',
                contentType: 'application/json; charset=utf-8',
                cache: false,
                success: function () {
                    alert('send is okay')
                }
            });
    }
    

    如果你使用的是.net core 3.0,还需要通过安装Microsoft.AspNetCore.Mvc.NewtonsoftJson来配置json序列化器,像这样配置

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews().AddNewtonsoftJson();
    }
    

    【讨论】:

    • tnx 以获得好的回复。但有一个问题。 (我使用了 mvc 核心 2.2)。它适用于 Object 而不是 Hazine 。我想知道为什么
    • @AminSoraya Hazine 是什么?
    • Hazine 是一个我想将 Json 映射到它的类。实际上我发送了找出 Hazine 的 jsons
    • @AminSoraya 分享Hazine的定义
    • 好的。我将 Hazine 对象放入表中。所以当用户单击一个记录时,它调用了函数 Send(op) 。 (此表包含许多 Hazine 记录)并创建 json 并发送到操作结果以进行更新
    【解决方案2】:
     public class Hazine:TableBase
    {
    
    
        [Key]
        public string UniqueId { get; set; }
    
    
    
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    
        public int HazineId { get; set; }
    
    
        public int HazineType1 { get; set; } // check paid , check
    
    
    
    
        public int ProjectId { get; set; }
    
    
    
        public int Mablagh { get; set; }
    
    
    
    
        public int MablaghPaid { get; set; }
    
    
    
    
        [StringLength(150)]
        public string HazineDate { get; set; }
    
    
    
    
        public long HazineDateLong { get; set; }
    
    
    
        [StringLength(150)]
        public string HazineTitle { get; set; }
    
    
    
    
        [StringLength(350)]
        public string HazineComment { get; set; }
    
    
    
        [StringLength(150)]
        public string ForoshgahName { get; set; }
    
    
    
    
        [StringLength(150)]
        public string PayLastDate { get; set; }
    
    
    
    
        [StringLength(150)]
        public long PayDateLong { get; set; }               
    
    }
    
        public class TableBase
    {
        [NotMapped]
        public bool isModified { get; set; }
    
    
    
        [StringLength(150)]
        public string SaveDate { get; set; }
    
    
    
        public long SaveDateLong { get; set; }
    
    
    
        [StringLength(150)]
        public string SendDate { get; set; }
    
    
    
    
        public long SendDateLong { get; set; }
    
    }
    

    控制台日志:

    {"HazineId":"4","UniqueId":"1111","HazineType1":"1","HazineType2":"1","SendDate":"5","ProjectId":"1","Mablagh":"1","MablaghPaid":"1","HazineDate":"1","HazineDateLong":"1","HazineTitle":"11111","HazineComment":"1","ForoshgahName":"1","PayLastDate":"1","PayDateLong":"111111111","SaveDate":"8888","SaveDateLong":"888","SendDateLong":"5"}
    

    它工作:

       [HttpPost]
        public IActionResult Edit([FromBody]Object data)
        {
           Hazine hazineJson =JsonConvert.DeserializeObject<Hazine>(data.ToString());
    
            hazine.Update(hazineJson);
            return View();
        }
    

    它不起作用:

    [HttpPost]
        public IActionResult Edit([FromBody]Hazine data)
        {
    
            hazine.Update(data);
            return View();
        }
    

    在第二个函数中无法调用并出现 err 500

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 2021-12-31
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      相关资源
      最近更新 更多