ASP.NET MVC 5 从 Javascript 错误调用控制器方法

ASP.NET MVC 5 calling controller method from Javascript Error

我正在尝试从 javascript 调用控制器方法,但我似乎无法正确执行它。我对 javascript 的经验很少,并且遵循了其他如何从 Whosebug 执行此操作的示例,但我仍然遇到一些问题 - 如果有人可以提供帮助,那就太棒了。

基本上我想做的是将 javascript 对象上的 .data 标记设置为控制器上的方法返回的字符串(此方法调用运行 SQL 的网络服务服务器功能)。该方法需要传递一个在函数中使用的参数。

代码如下:

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: call of ajax.

中所指的

基本上发生的事情是当我运行该页面时,我首先收到一条错误消息说它无法将 this.node.fill 设置为空值 THEN 我收到警告发生了一个错误——就像我说的,我对 javascript 非常缺乏经验,所以老实说,如果我在收到错误之前在 this.node.fill 上遇到错误,我什至不确定它是否以正确的顺序调用该方法来自 JQuery.

的消息

Any/all 非常感谢帮助或建议!!!

  1. 如果您的控制器 class 是 NodeController,请仅使用 "Node" 作为 Url.Action:

    中的控制器名称
    url: '@Url.Action("CallService", "Node")',
    
  2. 您不能同步 return 来自异步函数的值。将回调传递给 CallService 以在成功时调用或使用 jquery promise - http://api.jquery.com/promise/

  3. 我们不知道 this.node.fill 是什么,也不知道它是在哪里定义的。可能 this.node 在执行赋值时未定义。

你不需要用控制器的名字来写控制器

@Url.Action("CallService", "Node")