带有函数调用.cshtml的Javascript变量

时间:2015-05-24 15:42:20

标签: javascript jquery asp.net-mvc razor

我有一个asp.net MVC项目,在一个.cshtml文件中我有一个jquery微调器。单击按钮时,它将获取微调器的值。我希望在.cshtml文件中获取微调器值并调用函数(C#)并将变量传递给函数。

这是我在cshtml中的jquery代码。我正在尝试实现一个ajax POST方法来调用函数" GetData"使用函数位于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函数是这样的,因为它在cshtml中,所以它被定义为@Helper函数

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

ajax调用抛出异常(Exception [object Object])。我不能工作的主要嫌疑人是1)我的"数据"格式和2)" url"是正确的。

我不仅限于考虑ajax,我对任何可以调用函数的方法都开放,并将变量从Javascript / Jquery传递到.cshtml中的@Helper函数(如果确实这是最好的方法),也许我应该更多地使用.cs文件,即控制器?

非常感谢任何帮助和指导。

2 个答案:

答案 0 :(得分: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);
    }

我使用AJAX请求从cshtml调用GetData函数,然后使用相同的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函数在技术上更正确。

答案 1 :(得分:0)

如果要在视图中调用函数,为什么要使用ajax? AJAX用于向服务器发送数据。这里,你只需要在点击事件中调用辅助函数。

就这样做。

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