如何在Ajax调用中将参数传递给Controller方法?

时间:2019-07-09 19:21:20

标签: javascript c# asp.net-mvc razor kendo-ui

我正在尝试使用Ajax调用刷新DisplayController中的局部视图。我对JS不太熟悉,我想知道如何将参数传递到我的GetModel()方法中。我希望该参数以ViewModel或字符串的形式代表KendoDropDown中的内容。

我尝试将不同的内容传递到“数据:”字段中。通过这种当前设置,我可以将其传递给DisplayViewModel,但是该视图模型为null,几乎没有用。

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方法。谢谢!

编辑:

我想澄清一下,我想知道要在“数据:”字段中输入什么。当前代码是唯一不会破坏我的下拉列表的方法,但是这种方法仍然无法为我提供有用的信息。我想知道如何用有用的信息填充或将其更改为有用的信息。

编辑:

为了防万一,我将添加我的DropDownValue()JS方法。

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

2 个答案:

答案 0 :(得分:2)

事物的结合,首先,您需要指定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");
}

答案 1 :(得分:1)

您无法通过get方法将模型传递给行动 您必须将类型更改为'post'并添加

[HttpPost]

GetModel操作上方的属性