2015-01-05 44 views
5

我試圖從javascript調用控制器方法,我似乎無法正確執行此操作。我對JavaScript的使用經驗很少,並且遵循了其他關於如何從stackoverflow執行此操作的示例,但我仍然遇到了一些問題 - 如果任何人都可以提供幫助,那就太棒了。ASP.NET MVC 5從Javascript調用控制器方法錯誤

基本上我試圖做的是在JavaScript對象上設置一個.data標籤,以便由控制器上的方法返回的字符串(此方法調用運行SQL Server函數的webservice)。該方法需要傳遞函數中使用的一個參數。

的代碼如下:

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上發生錯誤。

任何/所有幫助或建議非常感謝!

+1

基本異步編碼錯誤:你不能從一個回調函數中返回一個值(如'成功:')如出現這種情況長你的功能退出後。 @Igor下面有一些正確的建議。 –

回答

5
  1. 如果你的控制器類是NodeController,只能使用「節點」爲控制器名Url.Action

    url: '@Url.Action("CallService", "Node")', 
    
  2. 不能同步從異步函數返回一個值。無論是傳遞一個回調CallService被叫做成功或使用jQuery的承諾 - http://api.jquery.com/promise/

  3. 我們不知道什麼是this.node.fill或定義它。可能,this.node在執行分配時未定義。

+0

謝謝!我需要使用所有的提示,以及從獲取到切換後的類型 – jhinx

2

你不必與控制器的名字寫控制器

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

我試過了,它沒有解決問題 - 我仍然在同一順序中看到相同的錯誤 – jhinx

+0

您錯過了整個「從異步函數中間返回一個值「的問題:) –

相關問題