Как отобразить параметры DataTable в контроллере (MVC Core 2.2)? - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь отправить датируемые параметры на сервер, однако то, что раньше работало в .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 всегда равно нулю.

1 Ответ

0 голосов
/ 30 сентября 2019

Итак, я изменил метод с GET на POST, и он работал. Теперь я получаю все нужные значения.

Ха ...

...