2015-05-24 76 views
2

我有一個asp.net MVC項目和一個.cshtml文件我有一個jquery微調。點擊按鈕時,它獲取微調器的值。我希望獲取微調器值並在.cshtml文件中調用函數(C#)並將變量傳遞給該函數。JavaScript變量與函數調用.cshtml

這是我在cshtml中的jQuery代碼。我試圖實現一個Ajax POST方法,其中所述功能駐留內(與此代碼駐留的文件)Index.cshtml

 $('#getvalue').on('click', function (event) { 
      var interval = spinner.spinner("value"); 
      // Make the ajax call 
      $.ajax({ 
       type: "POST", 
       url: "@Url.Action("GetData", "Index")", 
       contentType: "application/json; charset=utf-8", 
       data: interval, 
       dataType: "json", 
       success: function (result) { 
        alert('It worked!'); 
       }, 
       error: function(exception){alert('Exeption:'+exception); 
       } 
      }); 
     }); 

功能的GetData是這樣來調用函數「的GetData」與間隔值,並且因爲它是CSHTML內,則它被定義爲一個功能@Helper

 @helper GetData(int interval) 
     { 
      var xdata = Model.Select(model => model.Id).Take(10).ToList(); 
     } 

AJAX調用拋出異常(異常[對象的對象])。我的主要嫌疑人這不工作是1)我的「數據」格式和2)「網址」是正確的。我不限於只考慮ajax,我可以調用任何可以調用函數並將變量從Javascript/Jquery傳遞給.cshtml中的@Helper函數的方法(如果確實這是最好的方法),也許我應該使用.cs文件,即控制器?

任何幫助和方向將不勝感激。

回答

1

它的工作原理是建議對這個職位的解決方案 - asp.net mvc3 return multiple json list

我提出我的GetData功能出CSHTML的,放在一個controller.cs

[HttpPost] // can be HttpGet 
    public ActionResult GetData(int interval) 
    { 
     //use interval value here ... 

     return Json(new { XList = strxdata, YList = strydata }, JsonRequestBehavior.AllowGet); 
    } 

我叫的GetData函數從cshtml使用AJAX請求,然後在相同的JS代碼中處理返回的數據。

 $.ajax({ 
      url: '/SController/GetData', 
      type: 'POST', 
      contentType: 'application/json;', 
      data: JSON.stringify({ id: interval }), 
      success: function (result) { 
       $.each(result, function (i, item) { 
        alert(result.XList); 
        alert(result.YList); 
       }); 
       //process the returned data here .... 
       var jxArray = result.XList.split(','); 
       var jyArray = result.YList.split(','); 
       } 
     }); 

我希望這可以幫助別人,其實我認爲它在技術上更正確的代碼分裂出來的控制器比使用@helper功能。

0

如果你想在視圖中調用一個函數,爲什麼要使用ajax? AJAX用於將數據發送到服務器。在這裏,您只需要在click事件中調用helper函數。

就這樣做。

$('#getvalue').on('click', function (event) { 
     var interval = spinner.spinner("value"); 
     var result = @GetData(interval); 
     if(result!=null || result!= 'undefined') { 
     alert('It worked!'); 
     } 
} 
+0

當我測試了這個解決方案時,我遇到的錯誤是GetData原型中的「間隔」是「超出上下文」。 – tomdertech

+0

你爲什麼將間隔傳遞給GetData助手?它甚至不使用該變量。 –