【问题标题】:When Populating a datatable the value passed to the controller is null填充数据表时,传递给控制器​​的值为 null
【发布时间】:2021-07-22 14:23:19
【问题描述】:

我在根据控制器的结果填充数据表时遇到问题。

我已经阅读了很多关于它的帖子,但我不知道为什么会出现这个错误。

这是我的控制器

        [HttpPost]
        public async Task<IActionResult> SearchOrder([FromBody]SearchInfo order)
        {
            var Url = _appSettings.CashSystemAPIUrl + "api/Order/GetOrderBy";
            var r = await _repository.GetAllAsync(Url, order, HttpMethod.Post);
            var result = Json(new { data =  r});
            return result;
        }

这是我的模型

public class SearchInfo
    {
        
        public int OrderType { get; set; }

        public string OrderKeyword { get; set; }
    }

这是我的观点

<table id="tblOrdersData" class="table table-striped table-bordered" style="width:100%">
                        
                        <thead>
                            <tr>
                                <th>Order Number</th>
                                <th>Invoice Number</th>
                                
                            </tr>
                        </thead>
                       
                        <tbody>
                        </tbody>
                      
                    </table>

这是我的 javascript

<script type="text/javascript">
    $(document).ready(function () {
        $('#btnsearch').click(function () {
            var dataTable;
            var selectedValue = $("#searchCategory").val();//$("#searchCategory option:selected").text();
            
            var textboxvalue = $('#searchvalue').val()

            var SearchInfo = {};
            SearchInfo.OrderType = parseInt(selectedValue);
            SearchInfo.OrderKeyword = textboxvalue;

            dataTable = $('#tblOrdersData').DataTable({
                "ajax": {
                    "contentType": "application/json; charset=utf-8",
                    "datatype": "json",
                    "type": "POST",
                    "url": "/Orders/SearchOrder",
                    "datatype": JSON.stringify(SearchInfo)
                },
                "columns": [
                    { "data": "orderNo", "width": "50%" },
                    { "data": "invoiceNo", "width": "20%" }
                ]
            });

        });
    });
    
</script>

这是调试的截图

OrderTypeOrderKeyword中有一个值

但是当它在控制器中被传递时它变成了 null。

但是当我使用此代码调用控制器时

$.ajax({
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            type: 'POST',
            url: '/Orders/SearchOrder',
            data: JSON.stringify(SearchInfo),
            success: function (result) {
                alert(result);
                location.reload();
            },
            error: function () {
                alert("Error!")
            }
        });

数据正确传递给控制器​​

但我需要一种方法从控制器获取结果以填充数据表。

那么为什么第一个 javascript 将 null 值传递给控制器​​?我不明白。代码对我来说是一样的。那为什么它是空的呢?

谢谢

更新

我更新了代码并将其变为

dataTable = $('#tblOrdersData').DataTable({
                "ajax": {
                    "contentType": 'application/json; charset=utf-8',
                    "datatype": 'json',
                    "type": 'POST',
                    "url": '/Orders/SearchOrder',
                    "data": JSON.stringify(SearchInfo)
                },
                "columns": [
                    { "data": "tco", "width": "50%" },
                    { "data": "orderNo", "width": "20%" },
                    { "data": "fullPrice", "width": "20%" },

                ]
            });

但控制器仍然收到 null。

【问题讨论】:

  • 你只需要仔细检查你的JS代码,为什么你有两次数据类型?

标签: asp.net asp.net-mvc asp.net-core datatables


【解决方案1】:

你在第一个 JS 代码中写了两次datatype

您已在第二个示例中更正了该问题,即 data: JSON.stringify(SearchInfo),

编辑

还要检查SearchOrder的json响应元素的casing,json元素必须与tcoorderNofullPrice相同

$.ajax({
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    type: 'POST',
    url: '/Orders/SearchOrder',
    data: JSON.stringify(SearchInfo),
    success: function(result) {
        $('#tblOrdersData').DataTable({
            "data": result,
            "columns": [{
                    "data": "tco",
                    "width": "50%"
                },
                {
                    "data": "orderNo",
                    "width": "20%"
                },
                {
                    "data": "fullPrice",
                    "width": "20%"
                },

            ]
        });
    },
    error: function() {
        alert("Error!")
    }
});

【讨论】:

  • 我更新了它,控制器仍然收到 null。我还更新了问题并放入了更新的代码。你能告诉我我的代码现在有什么问题吗?谢谢
  • @audreyatwork 检查编辑后的答案。一旦收到来自 ajax 调用的result,您就可以绑定数据表
猜你喜欢
  • 1970-01-01
  • 2016-06-02
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 2020-11-09
相关资源
最近更新 更多