在JAX调用中将Json数据发送到@ Html.Action

时间:2018-03-16 14:53:06

标签: jquery asp.net-mvc-5 asp.net-ajax

我有一个div,如下所示,

<div id="d1"></div>

其内容将使用AJAX调用填充部分视图。

以下是AJAX实现:

        $.ajax({
                        type: "POST",
                        url: '@Url.Action("GetCustReqChartData", "DA_CPC")',
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        data: "{'ProjectID':" + getUrlParameter('PID')"}",
                        success: function (JsonData)
                        {
                            $('#d1').load('@Html.Action("PlotCurrentStatusCountTbl", "DA_CPC", new{ CurrentStatus = JsonData.StatusCount })');
    }
});

虽然我在AJAX上面调用,但是我收到错误: 名称&#39; JsonData&#39;在当前上下文中不存在。 在下面一行:

$('#d1').load('@Html.Action("PlotCurrentStatusCountTbl", "DA_CPC", new{ CurrentStatus = JsonData.StatusCount })');

如何将javascript变量传递给@Html.Action方法。

2 个答案:

答案 0 :(得分:0)

将JsonData移出引号,如下所示的变量响应:

$.ajax({            
    success: function (response) {                
        $('#test').append('<li>' + 
            response[i].displayName + '(Not Approved)</li>');
    }
}

答案 1 :(得分:0)

问题:Razor不知道JsonData是什么。 JsonData未填充,在浏览器中运行之前甚至不存在。当视图在javascript之前和完全不同的上下文中呈现时,服务器会解释并运行Razor。

解决方案: 有jQuery load()的重载需要一个数据参数。

$('#d1').load('@Html.Action("PlotCurrentStatusCountTbl", "DA_CPC")', {CurrentStatus: JsonData.StatusCount});

这样Razor正确地格式化URL,并且参数在运行时由javascript确定。