首页 > 解决方案 > 如何在控制器中映射 DataTable 参数(MVC Core 2.2)?

问题描述

我正在尝试将数据表参数发送到服务器,但是过去在 .NET Framework 中工作的内容似乎在 .NET Core 中不起作用。似乎它只是无法映射主DTParameters对象中的对象,因为我得到了Length, Draw,的值Start

DTParameters班级:

public class DTResult<T>
{
    public int draw { get; set; }

    public int recordsTotal { get; set; }

    public int recordsFiltered { get; set; }

    public IEnumerable<T> data { get; set; }
}

public abstract class DTRow
{
    public virtual string DT_RowId
    {
        get { return null; }
    }

    public virtual string DT_RowClass
    {
        get { return null; }
    }

    public virtual object DT_RowData
    {
        get { return null; }
    }
}

public class DTParameters
{
    public int Draw { get; set; }    

    public DTColumn[] Columns { get; set; }

    public DTOrder[] Order { get; set; }

    public int Start { get; set; }

    public int Length { get; set; }

    public DTSearch Search { get; set; }

    public string SortOrder
    {
        get
        {
            return Columns != null && Order != null && Order.Length > 0
                ? (Columns[Order[0].Column].Data + (Order[0].Dir == DTOrderDir.DESC ? " " + Order[0].Dir : string.Empty))
                : null;
        }
    }

    public int SearchOption { get; set; }

}

public class DTColumn
{
    public string Data { get; set; }

    public string Name { get; set; }

    public bool Searchable { get; set; }

    public bool Orderable { get; set; }

    public DTSearch Search { get; set; }
}

public class DTOrder
{
    public int Column { get; set; }

    public DTOrderDir Dir { get; set; }
}

public enum DTOrderDir
{
    ASC,
    DESC
}

public class DTSearch
{
    public string Value { get; set; }

    public bool Regex { get; set; }
}

ajax 调用:

ajax: {
    "type": "GET",
    "url": '@Url.Action("GetCompanies", "Company")',                     
    "data": function (data) {
        return data;
     }

我一直使用function (data) { return data = JSON.stringify(data); },但我必须在这里删除 stringify 以便至少将一些值发送到服务器。

Startup.cs

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddJsonOptions(options =>
            {
   options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
}); 

最后,CompanyController

public object GetCompanies(DTParameters param)
{    
    return _companyService.GetCompaniesForDatatable(param, CurrentClient);
}

Search属性param始终为空。

标签: c#.netasp.net-coredatatableasp.net-core-2.2

解决方案


所以我将方法从GETto更改为POST有效。现在我得到了我需要的所有值。

嗯……


推荐阅读