通过JQuery将对象和基元传递给Controller

时间:2019-07-19 22:54:30

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

从查看类似的线程开始,但是那里的解决方案对我而言不起作用。

Passing multiple objects to my controller

这是我的javascript onclick事件:

var test = function () {
        var vm = {
            "IsNew": true,
            "SelectedId": 1,
            "SelectedCode": null
        };
        var idk= JSON.stringify(vm);
        $.ajax({
            url: $("base").attr("href") + "Controller/ComplexityTest",
            method: "POST",
            contentType: 'application/json',
            data: idk,
            success: function (msg) {
                alert('success')
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert("Error: " + textStatus + ", " + errorThrown);
            }
        });
    };

在我的控制器上,我有以下端点:

    [HttpPost]
    public async Task<IActionResult> ComplexityTest([FromBody] MyViewModel vm, long categoryId, long personId, DateTime startDate)
    {
        //...do work
    }

为简单起见,假设这是我的模型:

public class MyViewModel
{
    public bool IsNew {get; set;}
    public int SelectedId {get; set;}
    public string SelectedCode {get; set;}
}

运行此命令后,我可以看到vm已正确填充。问题是我还试图填充一些其他原语,以与MyViewModel一起发送。

我尝试在vm初始化程序中添加其他字段,并对整个字符串进行字符串化处理。

我尝试将数据设置为{“ vm”:idk,“ categoryId”:1,等等...}。

到目前为止,我所做的所有事情不仅使我获得了新参数,而且使我也失去了原始的vm对象。

如何将对象(类)和多个基元传递给POST方法?我是否只需要创建一个包含其他参数的新DTO对象,然后发送该对象?

2 个答案:

答案 0 :(得分:1)

select id from tablename group by id having count(value) = count(*) and min(value) = max(value) and min(value) = 'A'; ajax参数中,使用此

url

老实说,我不知道为什么url: '@Html.Raw(Url.Action("ComplexityTest", "Home", new { categoryId = 123, personId = 456, startDate = "2019-07-19" }))', 在.net core中不能正常工作,但是我使用Url.Action使其起作用。 ??‍♂️??‍♂️??‍♂️

enter image description here

...但是它起作用。...

答案 1 :(得分:0)

这是在javascript中实现的方法

var test = function () {
    var vm = {
        "IsNew": true,
        "SelectedId": 1,
        "SelectedCode": null
    };
    var obj = { vm: vm, categoryId: 1, personId:3, startDate:new Date() };

    var idk= JSON.stringify(obj);
    $.ajax({
        url: $("base").attr("href") + "Controller/ComplexityTest",
        method: "POST",
        contentType: 'application/json',
        data: idk,
        success: function (msg) {
            alert('success')
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert("Error: " + textStatus + ", " + errorThrown);
        }
    });
};

我真的不知道$("base").attr("href")会为您带来什么,但我只是尝试了/Controller/ComplexityTest

我也没有使用[FromBody] MyViewModel vm,而是使用MyViewModel vm