使用Razor在Javascript代码中使用C#类中的变量

使用Razor在Javascript代码中使用C#类中的变量,c#,javascript,razor,web,C#,Javascript,Razor,Web,我正在用Rezor中的Telerik Kendo开发一个web应用程序。我的问题是: 我有一个变量,我将其设置为类型列表 @{ ViewBag.Title = "Home Page"; var dpdminst = new DB(); var data = dpdminst.getdata();} 我希望能够使用此变量(数据)在Javascript中设置数据源: <script> var displaydata = @data $(

我正在用Rezor中的Telerik Kendo开发一个web应用程序。我的问题是: 我有一个变量,我将其设置为类型
列表

    @{
ViewBag.Title = "Home Page";
var dpdminst = new DB();
var data = dpdminst.getdata();}
我希望能够使用此变量(数据)在Javascript中设置数据源:

    <script>
        var displaydata = @data

        $(document).ready(function () {
            $("#grid").kendoGrid({
                height: 550,
                groupable: true,
                sortable: true,
                pageable: {
                    refresh: true,
                    pageSizes: true,
                    buttonCount: 5
                },
                dataSource: {
                    data:displaydata,
                    schema: {
                        model: {
                            fields: {
                                amount: { type: "string" },
                            }
                        }
                    },
                    columns:["amount"]
                }
            });
        });
    </script>

有一个action方法,它以JSON格式返回所需的数据。在document.ready事件中,进行ajax调用以获取此数据,然后可以将其设置为数据源

public ActionResult GetJsonData()
{
  var dpdminst = new DB();
  var data = dpdminst.getdata();
  return Json(data,JsonRequestBehaviour.AllowGet);
}
在您的视图中,使用getJSON方法从这个操作方法获取数据,并根据需要使用它。您可以根据UI要求格式化传入的json

$(document).ready(function () {

  $.getJSON("@Url.Action("GetJsonData","YourControllerName")",function(data){
    // you have your json data in the "data" variable. 
    // now you may use it to set the data source of your grid library

  });

});

如果您不想处理ajax/json,那么我将尝试实现您想要的功能,如下所示:

<script>
    var displaydata = [
    @foreach (var record in dpdminst.getdata())
    {
        @: { amount: '@record' },
    }
    ];
    $(document).ready(function () {
        $("#grid").kendoGrid({
            height: 550,
            groupable: true,
            sortable: true,
            pageable: {
                refresh: true,
                pageSizes: true,
                buttonCount: 5
            },
            dataSource: {
                data:displaydata,
                schema: {
                    model: {
                        fields: {
                            amount: { type: "string" },
                        }
                    }
                },
            },
            columns:["amount"]
        });
    });
</script>

变量显示数据=[
@foreach(dpdminst.getdata()中的var记录)
{
@:{金额:'@record'},
}
];
$(文档).ready(函数(){
$(“#网格”).kendoGrid({
身高:550,
分组:对,
可排序:是的,
可分页:{
刷新:是的,
页面大小:对,
按钮数:5
},
数据源:{
数据:显示数据,
模式:{
型号:{
字段:{
金额:{type:“string”},
}
}
},
},
列:[“金额”]
});
});

另外,请注意,您的列:[“amount”]位于错误的位置,并且此代码必须在cshtml中才能使razor语法正常工作。

检查此use Newtonsoft.Json库以方便完成作业。Nick,我相信提供了两种非常不同但都可行的方法来解决您的问题,因此,如果您需要其他帮助,请询问,但除此之外,我不认为打开此线程有任何意义。亲爱的投票人,我没有名誉可言,所以至少要尽力提供反馈,说明您认为此解决方案没有用的原因,谢谢!如果Nick的意图是只设置一次数据源,并且没有明确说明是否要处理dpdminst.getdata()返回值的动态更改,那么我发现这个解决方案是完全可行的。但是使用这种方法,
displaydata
中的最后一行将有一个逗号,这是不正确的。当您不分析最后一行时,您需要一些逻辑来设置逗号。不,不会的,请尝试解决方案并亲自查看。下面是如果dpminst.getdata()返回两个字符串“xxx”和“yyy”的列表,结果会是什么样子:有什么原因我不能将Json(…,…)作为一个函数?我只使用以下库:
使用System.Web.Script.Serialization
使用System.Web.Mvc
使用Newtonsoft.Json
@Nick它是
Json
,位于
System.Web.Mvc
命名空间中。由于某些原因,我无法以相同的方式创建ActionResult。我上面的实现正确吗?@Nick,你犯了什么错误?另外,为什么不使用已经存在的Json方法将对象转换为Json?请尝试我在回答中提供的代码。我得到错误“名称Json在当前上下文中不存在”
<script>
    var displaydata = [
    @foreach (var record in dpdminst.getdata())
    {
        @: { amount: '@record' },
    }
    ];
    $(document).ready(function () {
        $("#grid").kendoGrid({
            height: 550,
            groupable: true,
            sortable: true,
            pageable: {
                refresh: true,
                pageSizes: true,
                buttonCount: 5
            },
            dataSource: {
                data:displaydata,
                schema: {
                    model: {
                        fields: {
                            amount: { type: "string" },
                        }
                    }
                },
            },
            columns:["amount"]
        });
    });
</script>