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

10 浏览
0 Comments

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

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

以下是AJAX调用:

$.ajax({
    type: 'POST',
    url: invokingControllerActionUrl,
    data: "这只是一个简单的字符串",
    success: function (data) {
        window.location.href = link;
    }
});

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

public IActionResult OnPostTest([FromBody] string stringValue)
{
    // stringValue始终为null :(
}

0
0 Comments

问题:发送数据到MVC控制器使用AJAX时出现了什么问题?

原因:发送数据到MVC控制器时,控制器接收不到数据。

解决方法:更改AJAX调用的方式。将代码修改为以下形式:

$.ajax({
    type: 'POST',
    url: invokingControllerActionUrl, // 确认变量中的路径是否正确,或者使用 .Action("OnPostTest", "InvokingController")
    data: {stringValue: "it is just a simple string"},
    success: function (data) {
        window.location.href = link;
    }
});

同时,移除控制器中的 `[FromBody]` 注解。并且最好定义请求类型为 POST,尽管这不是必须的。

[HttpPost]
public IActionResult OnPostTest( string stringValue)
{
    // stringValue 总是 null :(
}

通过以上修改,可以解决发送数据到MVC控制器时接收不到数据的问题。

0
0 Comments

问题的出现原因是根据JS发送的Content-Type不同,需要正确地编码字符串,作为一个表单值或者JSON格式。解决方法是根据讨论中的建议,通过以下方式传递未格式化数据的字符串:

public IActionResult OnPostTest()
{
    Stream req = Request.Body;
    req.Seek(0, System.IO.SeekOrigin.Begin);
    string stringValue = new StreamReader(req).ReadToEnd();
    ...
    // 在这里处理stringValue
    ...
}

0