繁体   English   中英

从 ajax 捕获对象 - asp.net core 2.1

[英]Catch object from ajax - asp.net core 2.1

我正在尝试将整个对象从 javascript 发送到 asp.net 核心控制器。

这是我正在使用的 C# 类:

public class AREvent
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string Text { get; set; }
}

我像这样从 ajax 传递它:

function Upp() {
    var ev = {};

    ev.ID = 1;
    ev.Title = "asd";
    ev.Text = "Some text";

    var fd = new FormData();
    fd.append("e", ev);
    fd.append("aaa", "Some text");

    alert(ev.ID); // alerts 1

    $.ajax({
        type: "POST",
        url: "/Events/Add1",
        cache: false,
        contentType: false,
        processData: false,
        data: fd,
        success: function () {
        }
    });
}

这是控制器:

[HttpPost]
[Route("/Events/Add1")]
public async Task<IActionResult> Add1(AR.AREvent e, string aaa)
{
    /// aaa is passed as "some text"
    /// e is passed as null or as empty object
    object a = e;
    return Json("1");
}

您不需要传递 FormData。 您必须像这样传递对象:

$.ajax({
            url: "/Events/Add1",
            type: 'POST',
            dataType: 'json',
            data: JSON.stringify(ev),
            contentType:  "application/json",
            success: function (result, text, xhr) {

            },
            error: function (request, status, error) {
            }
        });

在控制器中:

[HttpPost]
[Route("/Events/Add1")]
public async Task<IActionResult> Add1([FromBody] AREvent e)
{
    AREvent a = e;
    return Json("1");
}

据我所知,如果要将表单数据传递到控制器中,则无需新建一个名为 ev 的新 js 模型。 你应该直接在js中的表单数据模型中添加属性值,asp.net核心模型绑定会自动绑定该值。 模型绑定将根据表单数据名称而不是对象来映射属性。

更多细节,您可以参考以下代码:

function Upp() {
  

    var fd = new FormData();
    fd.append("ID", 1);
    fd.append("Title", "asd");
    fd.append("Text", "Some text");
    fd.append("aaa", "Some text2");

    $.ajax({
        type: "POST",
        url: "/Events/Add1",
        cache: false,
        contentType: false,
        processData: false,
        data: fd,
        success: function () {
        }
    });
}

结果:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM