使用Razor在Javascript代码中使用C#类中的变量
我正在用Rezor中的Telerik Kendo开发一个web应用程序。我的问题是: 我有一个变量,我将其设置为类型使用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 $(
列表
@{
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>