首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataTable在ASP.Net核MVC6中的实现

DataTable在ASP.Net核MVC6中的实现
EN

Stack Overflow用户
提问于 2019-12-27 18:38:54
回答 1查看 2.4K关注 0票数 1

我已经将我的应用程序从ASP.Net MVC 5 web应用程序转换为ASP.Net Core 6。在MVC 5中,我成功地实现了DataTables服务器端处理。然而,在ASP.Net核心中,我一直得到

错误404 (未找到)

预览浏览器的网络会话中的错误,我得到

HTTP 404.15 -未找到请求过滤模块配置为拒绝查询字符串过长的请求。

下面是我的网格视图

代码语言:javascript
复制
@model _AuditDTGridViewModel
<table class="table table-striped table-bordered table-hover" cellspacing="0" id="datatab">
    <thead id="sortableHeader" class="bg-grey">
        <tr id="columnFilterRow" class="filter" style="">
            @foreach (var c in Model.ColumnOptions)
            {
            <td>
                @if (c.ShowColumnSearchField)
                {
                if (c.ColumnSearchFieldType.ToLower() == "text")
                {
                <input id="filtercolumn_@c.ColumnName" class="input-xsmall" type="text" style="width: 100% !important" />
                }
                }
                else if (c.DisplayName == "Actions")
                {
                @*<button id="filterColumnSearchBtn" class="btn btn-xs btn-outline green" title="Search Columns" style="border-width: 1px!important; margin-bottom: 2px"><i class="fa fa-search"></i>Search</button>*@
                <button id="clearfilterColumnSearchBtn" class="btn btn-xs btn-outline red" title="Reset Filter" style="border-width: 1px!important"><i class="fa fa-times"></i>Clear Filter</button>
                }
            </td>
            }
        </tr>
        <tr id="sortableHeading" class="heading">
            @foreach (var c in Model.ColumnOptions)
            {
            <th>
                @Html.Raw(c.DisplayName)
            </th>

            }
        </tr>
    </thead>

    <tbody></tbody>
</table>
<script src="~/js/jquery.min.js"></script>
<script src="~/js/jquery.dataTables.min.js"></script>
<script src="~/js/dataTables.bootstrap.js"></script>
<script type="text/javascript">
    var oTable = $('#datatab').DataTable({
        "serverSide": true,
        "ajax": {
            "type": "POST",
            "url": '@Url.Action("AjaxListOfAudits", "Client", Model)',
            "contentType": 'application/json; charset=utf-8',
            'data': function (data) {
                return data = JSON.stringify(data);
            }
        },
        "pagingType": "full_numbers",
        "processing": true,
        "paging": true,
        "deferRender": true,
        "columns": @Html.Raw(Model.data),
    "order": [1, "asc"]
    });
</script>

在我的控制器中,我调用下面的操作

代码语言:javascript
复制
public JsonResult AjaxListOfAudits(_AuditDTGridViewModel _AuditDTGridViewModel, DTParameters param)
{
    // Some codes go here
}

这是我的_AuditDTGridViewModel

代码语言:javascript
复制
public class _AuditDTGridViewModel : BaseSearchFilterViewModel
    {
        public _AuditDTGridViewModel()
            : base()
        {
            AllAuditsOrMyAudits = 1;
        }

        public Dictionary<string, string> AuditType { get; set; }
        public int? MembershipId { get; set; }
        public int AllAuditsOrMyAudits { get; set; }
        public int? AuditAction { get; set; }
        public int? AuditCategory { get; set; }
        public string data { get; set; }
        public List<DTColumnOptions> ColumnOptions { get; set; }
    }

当我尝试调试时,该操作不会被击中。如果我从Url操作中删除模型,我就会得到

错误400 -不良请求

如果在

  1. 中传递查询模型的方法在dotnet内核中是错误的,那么如何实现?

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2019-12-30 06:22:49

HTTP 404.15 -未找到请求过滤模块配置为拒绝查询字符串过长的请求。

在您的代码中,我们可以发现您正在使用下面的代码片段传递您的Model对象来生成URL。如果超过长度限制,则会导致上述错误。

代码语言:javascript
复制
"url": '@Url.Action("AjaxListOfAudits", "Client", Model)'

如果您想将_AuditDTGridViewModel和服务器端处理参数传递给您的操作,请参考下面的示例代码从请求体传递它们。

论JS客户端

代码语言:javascript
复制
var oTable = $('#datatab').DataTable({
    "serverSide": true,
    "ajax": {
        "type": "POST",
        "url": '@Url.Action("AjaxListOfAudits", "Client")',
        "contentType": 'application/json; charset=utf-8',
        data: function (d) {
            //console.log(@Json.Serialize(Model));

            var _auditDTGridViewModel = @Json.Serialize(Model);
            var ajaxAuditsModel = {
                "_AuditDTGridViewModel": _auditDTGridViewModel, "DTParameters": d
            };

            //console.log(ajaxAuditsModel);

            return JSON.stringify(ajaxAuditsModel);
        }
    },

    // other options
});

在控制器动作中

代码语言:javascript
复制
public JsonResult AjaxListOfAudits([FromBody] AjaxAuditsModel ajaxAuditsModel)
{

    // Some codes go here

}

AjaxAuditsModel类

代码语言:javascript
复制
public class AjaxAuditsModel
{
    public _AuditDTGridViewModel _AuditDTGridViewModel { get; set; }
    public DTParameters DTParameters { get; set; }
}

测试结果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59504786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档