Как отправить последовательность конкретного объекта в Mvc Core Action через jquery ajax - PullRequest
0 голосов
/ 30 сентября 2019

Я создал функцию, которая отвечает за создание и отправку 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();
    }

, но он (Edit Action) не может получить объект изJQuery. так что это действие выполнено успешно, но с нулевым хазином!

созданный json, который я получаю из console.log:

["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"]

что не так?

Ответы [ 2 ]

0 голосов
/ 01 октября 2019
 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();
    }

во второй функции Cant Call и Err500 встреч

enter image description here

0 голосов
/ 01 октября 2019

Для отправки объекта в Controller с помощью FromBody строка 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, вам также необходимо настроить сериализатор json, установив Microsoft.AspNetCore.Mvc.NewtonsoftJson и настроить его как

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