如何从MVC控制器生成和传输JavaScript变量?
当页面第一次加载时,我试图用数据库中的项目列表填充JSON对象。此项目列表来自数据库。现在,我已经强类型化了视图,并在项目列表中循环构建一个HTML无序列表,然后在JavaScript中根据HTML中输出的内容构建JSON对象。但这太笨重了 理想情况下,我希望从控制器中的数据库中获取该数据,填充一个对象(或变量),然后将该变量发送到JavaScript以在那里使用,并跳过中间的HTML(HTML将使用jQuery动态更新)。到达JavaScript的变量不必是JSON对象,但它需要保存我从控制器填充的信息。从那里,我可以在JavaScript中构建JSON对象 一位朋友告诉我这是可能的,他目前正在使用这种方法,但从未在ASP.NETMVC中尝试过。有什么想法吗如何从MVC控制器生成和传输JavaScript变量?,javascript,asp.net-mvc,variables,controller,Javascript,Asp.net Mvc,Variables,Controller,当页面第一次加载时,我试图用数据库中的项目列表填充JSON对象。此项目列表来自数据库。现在,我已经强类型化了视图,并在项目列表中循环构建一个HTML无序列表,然后在JavaScript中根据HTML中输出的内容构建JSON对象。但这太笨重了 理想情况下,我希望从控制器中的数据库中获取该数据,填充一个对象(或变量),然后将该变量发送到JavaScript以在那里使用,并跳过中间的HTML(HTML将使用jQuery动态更新)。到达JavaScript的变量不必是JSON对象,但它需要保存我从控制器
澄清:我原本应该更清楚地回答我的原始问题,但我正在尝试将变量/JSON发送到外部javascript文件,而不是处理JSON对象/在标记内内联创建它。是的。从此处查找您正在使用的语言的JSON序列化程序:
然后,一旦实例化并填充了数据对象,就应该能够调用
.toJSONString()
方法(或类似方法),该方法将吐出JSON以传输到客户端。是的。从此处查找您正在使用的语言的JSON序列化程序:
然后,一旦实例化并填充了数据对象,就应该能够调用
.toJSONString()
方法(或类似方法),该方法将吐出JSON以传输到客户端。您可以只呈现一些JavaScript,而不是HTML中的无序列表。因此,如果您希望能够访问JSON对象列表,那么
<html>
<body>
<div>...</div>
<script type="text/javascript">
var list = {
<% foreach(var item in Model) { %>
{ x:<%= item.X %>, Y:<%= item.Y %>, Z:<%= item.Z %> },
<% } %>
};
// or
var x = <%= Model.MySerializedJson %>
</script>
</body>
</html>
...
变量列表={
{x:,Y:,Z:},
};
//或
变量x=
或者,您可以在呈现页面后使用Ajax调用。您可以只呈现一些JavaScript,而不是HTML中无序的列表。因此,如果您希望能够访问JSON对象列表,那么
<html>
<body>
<div>...</div>
<script type="text/javascript">
var list = {
<% foreach(var item in Model) { %>
{ x:<%= item.X %>, Y:<%= item.Y %>, Z:<%= item.Z %> },
<% } %>
};
// or
var x = <%= Model.MySerializedJson %>
</script>
</body>
</html>
...
变量列表={
{x:,Y:,Z:},
};
//或
变量x=
或者,您可以在呈现页面后使用Ajax调用。您可以直接将JSON分配给[javascript]变量,因为它是有效的javascript .NET在中包含一个序列化程序
System.Web.Script.Serialization.JavaScriptSerializer
在控制器中,您可能有一个类似于您正在传递的列表的内容:
ViewData["MyData"] = new List<int>() { 1, 2, 3 };
还可以在全局范围中存储变量,并在循环时将()值推送到该变量上
var MyData = new Array();
MyData.push(1);
MyData.push(2);
MyData.push(3);
您可以将JSON直接分配给[javascript]变量,因为它是有效的javascript .NET在中包含一个序列化程序
System.Web.Script.Serialization.JavaScriptSerializer
在控制器中,您可能有一个类似于您正在传递的列表的内容:
ViewData["MyData"] = new List<int>() { 1, 2, 3 };
还可以在全局范围中存储变量,并在循环时将()值推送到该变量上
var MyData = new Array();
MyData.push(1);
MyData.push(2);
MyData.push(3);
这就是Flicker最近解决此问题的方式: 根据他们的观察,最快的方法是以分隔文本的形式发送数据,然后使用String.prototype.split()完成任务,而不是使用JSON解析器 因为我们已经发现 字符串操作的几种方法 在大型琴弦上表现不好, 我们仅限于一种方法 我们知道它很快:split()。我们 使用控制字符进行分隔 每个触点和一个不同的控件 字符来分隔其中的字段 每个联系人。这使我们能够解析 将字符串转换为与对象接触的字符串 一个分裂,然后循环通过 数组并在每个字符串上再次拆分
这就是Flicker最近解决此问题的方式: 根据他们的观察,最快的方法是以分隔文本的形式发送数据,然后使用String.prototype.split()完成任务,而不是使用JSON解析器 因为我们已经发现 字符串操作的几种方法 在大型琴弦上表现不好, 我们仅限于一种方法 我们知道它很快:split()。我们 使用控制字符进行分隔 每个触点和一个不同的控件 字符来分隔其中的字段 每个联系人。这使我们能够解析 将字符串转换为与对象接触的字符串 一个分裂,然后循环通过 数组并在每个字符串上再次拆分
在你的控制器里
return Json(yourObject);
而不是
return View(yourObject);
MVC框架将把几乎所有内容序列化为JSON,只需注意具有循环关系的linq到sql对象
如果使用jqueryajax调用此函数,您将在“data”中获得一个JSON对象
如果希望控制器能够返回html(视图)或json,可以检查请求是否为ajax请求,如下所示:
if(Request.IsAjaxRequest())
{
}
在你的控制器里
return Json(yourObject);
而不是
return View(yourObject);
MVC框架将把几乎所有内容序列化为JSON,只需注意具有循环关系的linq到sql对象
如果使用jqueryajax调用此函数,您将在“data”中获得一个JSON对象
如果希望控制器能够返回html(视图)或json,可以检查请求是否为ajax请求,如下所示:
if(Request.IsAjaxRequest())
{
}
其他人对将数据转换为JSON的各种方法发表了评论。如果希望外部JS文件包含此JSON数据,则需要适当地路由对该JS文件的请求,以便将其作为动态请求,而不是静态文件的请求。一旦这样做,您就可以动态生成外部JS文件的JSON部分。其他人对将数据转换为JSON的各种方法发表了评论。如果希望外部JS文件包含此JSON数据,则需要