使用AJAX将数据发送到MVC控制器

时间:2019-05-02 11:35:24

标签: ajax asp.net-core-mvc

我正在尝试使用AJAX将数据发送到MVC Controller方法,但是我不知道我在做什么错。

这是AJAX呼叫

$.ajax({
    type: 'POST',
    url: invokingControllerActionUrl,
    data: "it is just a simple string",
    success: function (data) {
        window.location.href = link;
    }
});

这是控制器方法。它被调用,但参数始终为null。

public IActionResult OnPostTest([FromBody] string stringValue)
{
    // stringValue is always null :(
}

2 个答案:

答案 0 :(得分:1)

根据您从JS发送的Content-Type,您可能需要正确地将字符串编码为表单值

...
data: 'stringValue="it is just a simple string"',
...

或例如JSON:

...
data: '{stringValue: "it is just a simple string"}',
...

另请参阅this discussion

不幸的是,我还没有找到一种通过参数传递未格式化数据字符串的简便方法。根据{{​​3}},您可以执行以下操作:

public IActionResult OnPostTest()
{
    Stream req = Request.Body;
    req.Seek(0, System.IO.SeekOrigin.Begin);
    string stringValue = new StreamReader(req).ReadToEnd();
    ...
    // process your stringValue here
    ...
}

答案 1 :(得分:1)

将您的ajax调用更改为此

$.ajax({
    type: 'POST',
    url: invokingControllerActionUrl, // Confirm the Path in this variable Otherwise use @Url.Action("OnPostTest", "InvokingController")
    data: {stringValue: "it is just a simple string"},
    success: function (data) {
        window.location.href = link;
    }
});

并删除[FromBody]。同样,最好定义type post。没必要

[HttpPost]
public IActionResult OnPostTest( string stringValue)
{
    // stringValue is always null :(
}