ASP.NET Основной вызов MVC Ajax не передает параметры методу контроллера api

#c# #ajax #api #asp.net-core #model-view-controller

Вопрос:

Я пытаюсь вызвать метод контроллера API с помощью ajax и передать некоторые параметры. Вызывается метод api, но значения в методе контроллера равны нулю.

Используя тот же вызов ajax, другой контроллер (не контроллер api), имеющий тот же метод, получает значения параметров и возвращает результаты, но я застрял с передачей значений в метод контроллера api. Пожалуйста, помогите

  $(document).ready(function ()
                {
                    $("#DropDownName").change(function ()
                    {
                        $.ajax({
                            type: "POST",
                            dataType: "text",
                            url: "@(Url.Action("SampleAction", "XYZController"))",
                            data: {
                                "param1": $("#DropDownName :selected").val(),
                                "param2": $("#input2").val(),
                                "param3": $("#input3").val()
                            },

                            success: function (response) {

                            document.getElementById("result").textContent = "Result: "   response;
                        },


                        });
                    }); 
                });
 

Способ контроллера API

     [Route("api/[controller]")]
    [ApiController]
    public class XYZController : ControllerBase
    {
        [ActionName("SampleAction")]
        [HttpPost]
        public decimal SampleAction(string dropdownselectedvalue,decimal input2, int input3)
        {
         //code here - This method is getting called but getting null parameter values
        }
    }
 

Ответ №1:

Измените свой ajax, как показано ниже:

 data: {
        "dropdownselectedvalue":$("#DropDownName :selected").val(),
        "input2": $("#input2").val(),
        "input3": $("#input3").val(),
},
 

Обязательно добавьте FromForm свой внутренний код:

 [Route("api/[controller]")]
[ApiController]
public class XYZController : ControllerBase
{
    [ActionName("SampleAction")]
    [HttpPost]
    public decimal SampleAction([FromForm]string dropdownselectedvalue,
        [FromForm] decimal input2, [FromForm] int input3)
    {
        return input2;
        //code here - This method is getting called but getting null parameter values
    }
}
 

Комментарии:

1. [FromForm] заставил это сработать. Первая часть была верна в реальном коде. Я поместил здесь несколько фиктивных имен для параметров.