Home > Net >  Map jQuery datatable search param to property of class in c#
Map jQuery datatable search param to property of class in c#

Time:10-15

I am using .net core clean architecture along with jQuery datatable. Server-side search is enabled, but I cannot map that search param search[value] from datable to a model property in c#. I have tried the Newtonsoft JsonPropertyName attribute to map it but it fails. Below is my model code:

public class GetVotesByMeetingIdQuery : IRequest<PaginatedList<VoteCastDTO>>
{
    public int PageNumber { get; set; } = 1;

    public int PageSize { get; set; } = 10;

    public Search Search { get; set; }
}

public class Search
{
    [JsonProperty(PropertyName = "value")]
    public string Value { set; get; }

    [JsonProperty(PropertyName = "regex")]
    public bool Regex { set; get; }
}

I am able to capture the param from the request in my controller.

[HttpGet("GetVotesByMeetingId")]
public async Task<ActionResult<PaginatedList<VoteCastDTO>>> GetVotesByMeetingId([FromQuery] GetVotesByMeetingIdQuery query)
{
    var exist = Request.Query.TryGetValue("search[value]", out Microsoft.Extensions.Primitives.StringValues val);
    query.Search = exist ? val.ToString() : string.Empty;
    return await Mediator.Send(query);
}

but I don't want to do this as I want to keep my controller clean. Is there anyway to sort out this issue?

CodePudding user response:

You can use [FromQuery] attribute on the property. It will map the parameter to the property accordingly. Also, you need to change the property type to string as you are getting the param value in string. Below is the example:

public class GetVotesByMeetingIdQuery : IRequest<PaginatedList<VoteCastDTO>>
{
    public int PageNumber { get; set; } = 1;

    public int PageSize { get; set; } = 10;
    
    [FromQuery(Name = "search[value]")]
    public string Search { get; set; }
}
  • Related