2

在过去的几天里,我一直在试验和研究 Webmatrix 与 AJAX 的使用,不幸的是,我似乎无法找到足够的信息来帮助我让我的项目正常工作。我希望更多地了解这一切原则上是如何运作的,以便取得进展。希望这对其他正在学习这方面的人也有帮助。我将不胜感激任何建议和有用的链接。

(请原谅这篇文章的长度。)

关于我的项目的一点背景:

我正在使用一个 cs 类来组装几个List<int>'s 和List<double>'s,使用数据库中的数据和一些半复杂的算法。这些列表包含有关许多视频的信息,我正在使用这些列表来帮助我构建一个小视频应用程序,该应用程序最终会播放生成的带有 html5 视频和画布的视频列表。我一直在几个不同的编程环境和框架中测试这个项目(仅使用 javaScript,使用 openFrameworks 和 C++,使用带有数据库和 ajax、javaScript 等的 php)。我以前使用 ajax 没有遇到任何问题,但我在尝试在 Webmatrix 中实现这个概念时遇到了困难。

C# 数据类型、JSON 和 javaScript 之间有什么关系?

我与 php 一起使用的解决方案是这样的:

$sequenceData = array("array1" => $dataArray1, 
    "array2" => $dataArray2, 
    "array3" => $dataArray3,
    "array4" => $dataArray4);

echo json_encode($sequenceData);

然后使用 AJAX 在 javaScript 中使用这些数组。我不知道这是否是一个好的解决方案,但它对我来说足够简单并且有效。

现在我一直在尝试使用 C# 数据类型找到一个很好的解决方案。(我最近几周才真正学会了 C#,所以请多多包涵。)我目前的想法是,我的数据要么是,例如,a List<Dictionary<string, string>>,将我的数据转换为字符串,所以它们都是一样的,但是这似乎有点笨拙,这就是我想知道 JSON 如何处理这些数据类型以及 javaScript 是否(如何)识别它们的地方?或者,使用简单的类(结构?)可能更优雅,这样我就可以将数据作为一个对象传递。在这种情况下,我仍然会使用列表,所以问题仍然存在,这行得通吗?javaScript 会是 C# 对象吗?列表是否被视为数组?我使用 Google 和 Lynda.com 来获取有关 c#、json 等的更多信息,但我还没有真正完全理解这些东西是如何工作的。

Webmatrix 中的 JSON 编码

我一直主要使用两个来源来了解 JSON 帮助程序并通过 AJAX 获取编码数据:

来自microsoft.com和来自mikesdotnetting.com(指向特定文章的链接)

不幸的是,我还不能成功地从我的 cshtml 文件中传递数据。我一直在寻找有关 JSON 帮助程序的更多信息,但再次在网上找不到太多有用的信息。使用 jQuery $.ajax(我在之前的试验中与 php 一起使用)以及$.getJSON(在上面的链接中使用)函数,我无法成功地从 cshtml 文件中检索 JSON 数据。我认为从带有 AJAX 的 javaScript 继续的代码与我之前使用 php 创建要传递的数据时没有本质的不同,所以我想知道我在编码 JSON 数据时是否出错了。

我主要尝试了这两个概念,如在 mikesdotnetting.com 上看到的那样

var json = Json.Encode(data);
Response.Write(json);

Json.Write(data, Response.Output);

我对 php 所做的只是echo json_encode($sequenceData);一切似乎都可以自行运行,所以我想知道我在这里是否出错了,以及 php 和 webmatrix/razor/c# 在这里的工作方式有何不同。

我希望这篇文章不会太模糊。我尝试了很多不同的代码位和方法来解决这个问题,这就是为什么我没有附加更多我正在使用的代码。我认为我需要将我的整个过程和概念更多地调整为最适合在 Webmatrix、C# 等中执行的方式,而不仅仅是“翻译”。我真的很想更多地了解这些主题(JSON 助手、与 AJAX 的通信、流程中的数据类型等),并希望人们可以分享一些建议。

(谢谢你在这篇文章的最后还和我在一起)

4

1 回答 1

2

在 C# 中,有许多预定义的原始数据类型:int、string、double、byte、datetime 等。您可以使用类来定义自己的更复杂的数据类型。示例视频数据类型声明可能如下所示:

public class Video
{
    public int VideoId {get;set;}
    public string Title {get;set;}
    public DateTime ReleaseDate {get;set;}
}

您可以使用以下语法实例化 Video 类的实例:

Video myVideo = new Video{
    VideoId = 1,
    Title = "Spartacus",
    ReleaseDate = new DateTime(1960, 12, 8)
};

到目前为止,一切都很好。您可以实例化许多视频,并将它们从编程的角度放在某种集合中。对于您使用的集合类型,您有多种选择,但通用List<T>的很常见。T代表列表持有的类型;在这种情况下TVideo

List<Video> videoCollection = new List<Video>();
videoCollection.Add(myVideo);

因为声明了列表所持有的类型,所以称该列表是强类型的。数组不是强类型的。它们可以包含任何类型的对象。

在 WebMatrix(或更准确地说,是 ASP.NET 网页框架)中,Json 帮助器具有获取对象或集合并将它们序列化为 JSON 的方法。视频的每个 JSON 表示形式都将具有 VideoId、Title 和 ReleaseDate 属性:

[{"VideoId":1,"Title":"Spartacus","ReleaseDate":"\/Date(-286070400000)\/"}]

从那时起,您可以在页面文件中使用 jQuery 来处理 JSON 对象,其方式与在 PHP 中完全相同。

在您在我的网站上引用的文章中,数据是从数据库中获取的,并且在幕后有一些看不见的魔力。数据被转换为一种dynamic类型,框架在运行时根据数据库获得的数据列添加属性。

于 2013-09-13T09:39:49.453 回答