【问题标题】:ASP.NET MVC 5 calling controller method from Javascript ErrorASP.NET MVC 5 从 Javascript 错误调用控制器方法
【发布时间】:2015-03-03 07:22:22
【问题描述】:

我正在尝试从 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: call of ajax 中所指的。

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

非常感谢任何/所有帮助或建议!!!

【问题讨论】:

  • 基本异步编码错误:您不能从回调函数(如success:)的中间返回值,因为这会在您的函数退出很久之后发生。 @Igor 在下面有一些正确的建议。

标签: javascript c# jquery asp.net-mvc


【解决方案1】:
  1. 如果您的控制器类是NodeController,请仅使用“Node”作为Url.Action 中的控制器名称:

    url: '@Url.Action("CallService", "Node")',
    
  2. 不能从异步函数同步返回值。将回调传递给 CallService 以在成功时调用或使用 jquery promise - http://api.jquery.com/promise/

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

【讨论】:

  • 谢谢!我需要使用您的所有提示,并将类型从获取切换到帖子
【解决方案2】:

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

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

【讨论】:

  • 我试过了,但并没有解决问题——我仍然看到同样的错误以相同的顺序
  • 你错过了整个“从异步函数中间返回一个值”的问题:)
猜你喜欢
  • 2014-07-13
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
相关资源
最近更新 更多