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

时间:2015-01-05 17:41:46

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

我试图从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上出现错误,我是否确定它是否以正确的顺序调用该方法。

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

2 个答案:

答案 0 :(得分:5)

  1. 如果您的控制器类是NodeController,请仅使用&#34; Node&#34;对于Url.Action中的控制器名称:

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

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

答案 1 :(得分:2)

您无需使用控制器名称编写控制器

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