Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从MVC控制器生成和传输JavaScript变量?_Javascript_Asp.net Mvc_Variables_Controller - Fatal编程技术网

如何从MVC控制器生成和传输JavaScript变量?

如何从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对象。此项目列表来自数据库。现在,我已经强类型化了视图,并在项目列表中循环构建一个HTML无序列表,然后在JavaScript中根据HTML中输出的内容构建JSON对象。但这太笨重了

理想情况下,我希望从控制器中的数据库中获取该数据,填充一个对象(或变量),然后将该变量发送到JavaScript以在那里使用,并跳过中间的HTML(HTML将使用jQuery动态更新)。到达JavaScript的变量不必是JSON对象,但它需要保存我从控制器填充的信息。从那里,我可以在JavaScript中构建JSON对象

一位朋友告诉我这是可能的,他目前正在使用这种方法,但从未在ASP.NETMVC中尝试过。有什么想法吗


澄清:我原本应该更清楚地回答我的原始问题,但我正在尝试将变量/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数据,则需要