我试图从javascript调用控制器方法,我似乎无法正确执行此操作。我对javascript的经验很少,并且已经跟踪了如何从stackoverflow执行此操作的其他示例,但我仍然遇到一些问题 - 如果有人可以提供帮助那就太棒了。
基本上我要做的是将javascript对象上的.data标记设置为控制器上的方法返回的字符串(此方法调用运行SQL Server函数的Web服务)。该方法需要传递一个在函数中使用的参数。
代码如下:
Javascript代码
for (var i = 0; i < stats.length; i++)
{
var stat = stats[i].data('id');
var color = CallService(stat);
this.node.fill = color;
}
JQuery方法
function CallService(id) {
$.ajax({
url: '@Url.Action("CallService", "NodeController")',
type: 'GET',
dataType: 'json',
cache: false,
data: { 'id': id },
success: function (color) {
return color;
},
error: function () {
alert('Error occured');
}
});
}
控制器方法
[HttpGet]
public JsonResult CallService(string id)
{
var idNum = Convert.ToInt32(id);
var StationService = new getStationStatus.Service1SoapClient("Service1Soap");
string color = StationService.getStationStatus(idNum);
return Json(color, JsonRequestBehavior.AllowGet);
}
控制器被称为NodeController-这就是我在url中所指的:调用ajax。
基本上发生的事情是当我运行页面时,我首先得到一个错误,说它无法将this.node.fill设置为空值 THEN 我收到发生错误的警报 - 如我说我对javascript缺乏经验,所以老实说,如果我在收到来自JQuery的错误消息之前在this.node.fill上出现错误,我是否确定它是否以正确的顺序调用该方法。
非常感谢任何/所有帮助或建议!!!
答案 0 :(得分:5)
如果您的控制器类是NodeController
,请仅使用&#34; Node&#34;对于Url.Action
中的控制器名称:
url: '@Url.Action("CallService", "Node")',
您无法从异步函数同步返回值。将回调传递给CallService
以在成功时调用或使用jquery promise - http://api.jquery.com/promise/
我们不知道this.node.fill
是什么或它在哪里定义。可能,在执行赋值时未定义this.node
。
答案 1 :(得分:2)
您无需使用控制器名称编写控制器
@Url.Action("CallService", "Node")