Как передать параметр в метод Controller при вызове Ajax? - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь использовать вызов Ajax, чтобы обновить мои частичные представления в моем DisplayController.Я не очень знаком с JS, и мне интересно, как передать параметр в мой метод GetModel ().Я хочу, чтобы параметр представлял то, что находится в моем KendoDropDown, либо в виде ViewModel, либо в виде строки.

Я пробовал передавать разные вещи в поле «data:».С этой текущей настройкой я могу заставить ее передавать в DisplayViewModel, но эта модель представления пуста и бесполезна.

function OnClose() {
    var chart = $("#safetyIncident-chart").data("kendoChart");
    $.ajax({
        url: "Display/GetModel",
        type: "get",
        data: $("form").serialize(),
        success: function (result) {
            $("#partial").html(result);
        }
    });
    chart.dataSource.read();
    }

public ActionResult GetModel(DisplayViewModel dvm)
    {
        return View(dvm);
    }

Я хочу иметь возможность передавать параметр, основанный начто находится в моем DropDownPicker в мой метод GetModel.Спасибо!

РЕДАКТИРОВАТЬ:

Я думаю, чтобы уточнить, мне интересно, что поставить в поле "data:".Текущий код является единственным способом, который не нарушает мой раскрывающийся список, но этот способ по-прежнему не дает мне полезной информации.Мне интересно, как я могу заполнить это полезной информацией или изменить ее на полезную информацию.

РЕДАКТИРОВАТЬ:

Я собираюсь добавить свой метод DropDownValue () JS на всякий случай, если это может бытьполезно.

function DropDownValue() {
    var value = $("#productionLine-dropdown").data("kendoDropDownList").value();
    return { selectProductionLine: value };
}

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Пара вещей, сначала вам нужно указать свои type: "get" до type: "post", так как вы хотите отправить данные формы на контроллер. Во-вторых, вам нужно захватить переменные данных формы в вашем AJAX и отправить их в ваш Controller метод. Я даю вам простой пример того, как вы можете достичь этого:

<script type="text/javascript">

function OnClose() {
 var chart = $("#safetyIncident-chart").data("kendoChart"); //For your chart
 var value = $("#productionLine-dropdown").data("kendoDropDownList").value(); //Dropdown value

  var json = {
              chart: chart,
              value:value
             };

    $.ajax({
        url: '@Url.Action("GetModel", "Display")',
        type: 'post',
        dataType: "json",
        data: { "json": JSON.stringify(json)},
        success: function (result) {
            $("#partial").html(result);
        },
        error: function (error) {
             console.log(error)
        }
      });
   chart.dataSource.read();
}
</script>

И ваш Controller метод будет выглядеть так:

using System.Web.Script.Serialization;

[HttpPost]
public ActionResult GetModel(string json)
{

        var serializer = new JavaScriptSerializer();
        dynamic jsondata = serializer.Deserialize(json, typeof(object));

        //Get your variables here from AJAX call
        var chart= jsondata["chart"];
        var value=jsondata["value"];

        //Do something with your variables here    

    return Json("Success");
}
2 голосов
/ 09 июля 2019

вы не можете передать модель в действие методом get Вы должны изменить тип на 'post' и добавить

[HttpPost]

атрибут над действием GetModel

...