首页 > 解决方案 > AJAX 发布数据在到达 ASP.NET Core 2.1.1 控制器时为空

问题描述

我在将剃须刀页面中的 java 脚本中的值发布到控制器时遇到问题。- 收到的值始终为空。

我看到有人问过类似的问题,但未能找到问题的正确解决方案。

我在控制器中遇到了一个断点,(所以路由没问题)但是传递的参数值始终为空,并且不是 java-script 中最清晰的,我想向你们提供一些提示。

我基本上有下面的java脚本:

 var clickButton = function (buttonId) {
        $.ajax({
            type: "POST",
            async: false,
            cache: false,
            crossDomain: false,
            contentType: "application/json; charset=utf-8",
            url: "v1/buttons",
            dataType: "json",
            data: '{ buttonId:'+JSON.stringify( "buttonId" ) + '}',
            success: function (result) {
                //console.log("clickButton OK => " + result);
            }, //success: function (result) {
            timeout: 500 // 0.5 sec.
        }); //$.ajax({
    }//var clickButton = function(buttonNo) {

以及下面的 C# 控制器代码:

[Route( "v1/[controller]" )]
public class ButtonsController : Controller
{
 ...
  [HttpPost]
  public IActionResult OnButtonClicked( string buttonId )
  {
    // buttonId = null !!!
   ...

我在将布尔值传递给另一个控制器时遇到了类似的问题。其中 bool 始终为 false .. 即默认值。我想知道这是否是一个安全问题,当用户未经授权时,不允许帖子包含数据......

标签: javascriptc#controllerasp.net-ajaxasp.net-core-2.1

解决方案


问题出在 JSON 中,我通过这个微小的更改获得了价值,但它隐藏得很好。

 var clickButton = function (buttonNo) {
     console.log("clicked: " + buttonNo);
     $.ajax({
         type: "POST",
         url: "v1/buttons/",
         dataType: "json",
         data: { "buttonId": buttonNo }, // < === this is where the problem was !!
         success: function (result) {
         }, //success: function (result) {
      }); //$.ajax({
    }//var clickButton = function(buttonNo) {

我已经更改了控制器以接收一个字符串来标识按钮。现在看起来像这样:

[Route( "v1/[controller]" )]
public class ButtonsController : Controller
{
  ...
  [HttpPost]
  public IActionResult PostButtonClick( string buttonId ) {
    // buttonId now has a value !!!
  }
} 

推荐阅读