Нулевой параметр в методе контроллера Json, в то время как параметр Jquery имеет значение - PullRequest
0 голосов
/ 18 сентября 2018

Я создаю каскадный раскрывающийся список на основе примера, который я нашел здесь

Запрос, отправленный на сервер для запроса значений второго раскрывающегося списка, имеет ненулевые параметры, но при взломеметод контроллера, он кажется пустым.Как вы можете видеть ниже.

Любая помощь будет принята с благодарностью!Спасибо !!

parameter Country is null query from Chrome inspector

Он использует jQuery и ASP.NET MVC 5, в то время как мой проект ASP.NET MVCCore 2

Код в контроллере следующий:

public JsonResult States(string Country)
{
  List<string> StatesList = new List<string>();
  switch (Country)
  {
     case "India":
       StatesList.Add("New Delhi");
       StatesList.Add("Mumbai");
       StatesList.Add("Kolkata");
       StatesList.Add("Chennai");
       break;
  }
  return Json(StatesList);
}

А вот и AJAX:

<script src = "/lib/jquery/dist/jquery.js" > </script>
<script> 
$(document).ready(function ()
{
    $("#State").prop("disabled", true);
    $("#Country").change(function ()
    {
        if ($("#Country").val() != "Select")
        {
             var CountryOptions = {};
             CountryOptions.url = "/Dropdown/states";
             CountryOptions.type = "POST";
             CountryOptions.data = JSON.stringify({ Country: $("#Country").val() });
             CountryOptions.datatype = "json";
             CountryOptions.contentType = "application/json";
             CountryOptions.success = function (StatesList)
             {
                $("#State").empty();
                for (var i = 0; i < StatesList.length; i++)
                {
                     $("#State").append("<option>" + StatesList[i] + "</option>");
                }
                $("#State").prop("disabled", false);
             };

            CountryOptions.error = function ()
            {
                alert("Error in Getting States!!");
            };
            $.ajax(CountryOptions);
        }
        else
        {
             $("#State").empty();
             $("#State").prop("disabled", true);
         }
    });
}); 

1 Ответ

0 голосов
/ 23 сентября 2018

Поскольку вы указали contentType = "application/json" и отправляете строковые данные, вам нужно добавить атрибут [FromBody] в метод POST, чтобы указать ModelBinder использовать заголовок типа содержимого для определения IInputFormatterиспользовать для чтения запроса (который для json является JsonInputFormatter).Измените сигнатуру метода на

[HttpPost]
public JsonResult States([FromBody]string Country)

Однако отправлять данные как json необязательно, и вы можете использовать значение по умолчанию contentType ('application/x-www-form-urlencoded; charset=UTF-8').Вы можете удалить опцию contentType и использовать

CountryOptions.data = { Country: $("#Country").val() }; // not stringified
// CountryOptions.contentType = "application/json";

Для получения дополнительной информации см. Связывание моделей JSON POST в ASP.NET Core .

...