如何将 Ajax 参数传递给 ASP.NET 核心中的控制器

How to pass Ajax params to controller in ASP.NET Core

我用 select2 js 创建了一个 select 并创建了 ajax 请求:

$('#slcCidade').select2({
    ajax: {
        type:'POST',
        url: '/get-cidade',
        minimumInputLength: 3,
        data: function (params) {
            var query = {
                search: params.term
            }
            return query;
        },
        processResults: function (data) {

            return {
                results: data.items
            };
        }
    }
});

在我的控制器中,我有以下方法来获取数据,然后它 returns 到我的页面:

 [Route("get-cidade/{search:regex(^[[a-zA-Z]])}")]
    [HttpPost]
    public async Task<JsonResult> GetCidade(string search)
    {
        var lstCidadesVM = _mapper.Map<IEnumerable<CidadeViewModel>>(await _cidadeBLL.GetByNome(search));
        return new JsonResult(new { Data = lstCidadesVM });
    }

请求从未 returns 到我的控制器并分析请求我发现发生了 404 错误

Request URL: https://localhost:44394/get-cidade?search=curvelo
Request Method: GET
Status Code: 404 Not Found
Remote Address: [::1]:44394
Referrer Policy: no-referrer-when-downgrade

我哪里做错了?我只需要通过 AJAX.

输入搜索词来从我的控制器调用该方法

谢谢!

我认为您正在实施的路由主要是“/get-cidade/curvelo”,没有任何数据作为参数传输。

Select2 设置正确,问题出在控制器中的 GetCity 方法路由,它只是通过删除路由的 {search:regex(^[[a-zA-Z]])} 来工作。方法是这样的:

[Route("get-cidade")]
public async Task<JsonResult> GetCidade(string search)
{
    var lstCidadesVM = _mapper.Map<IEnumerable<CidadeViewModel>>(await _cidadeBLL.GetByNome(search));
    return new JsonResult(new { Data = lstCidadesVM });
}