2015-05-24 74 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助手?它甚至不使用该变量。 –