我有一个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调用时,我收到错误:当前上下文中不存在名称“JsonData”。在以下行:
$('#d1').load('@Html.Action("PlotCurrentStatusCountTbl", "DA_CPC", new{ CurrentStatus = JsonData.StatusCount })');
如何将javascript变量传递给@Html.Action
方法。
将JsonData移出引号,如下所示的变量响应:
$.ajax({
success: function (response) {
$('#test').append('<li>' +
response[i].displayName + '(Not Approved)</li>');
}
}
问题:Razor不知道JsonData是什么。 JsonData
未填充,在浏览器中运行之前甚至不存在。当视图在javascript之前和完全不同的上下文中呈现时,Razor被服务器解释和运行。
解决方案:jQuery load()有一个带有数据参数的重载。
$('#d1').load('@Html.Action("PlotCurrentStatusCountTbl", "DA_CPC")', {CurrentStatus: JsonData.StatusCount});
这样Razor正确格式化URL,参数在运行时由javascript确定。