如何将数据从c#传递到jquery / javascript?

时间:2013-09-24 15:36:59

标签: c# javascript jquery

我有一个函数,我想在页面加载时运行,所以在document.ready或pageLoad中。

使用jquery,我将使用其类名

触发该函数

在document.ready

var span = $('.linkify');
span.html(textToLinks(span.html()));

其他地方

function textToLinks(text) {

    var exp = /(my text)/ig;
    return text.replace(exp, "<a class='link' href='http://www.bbc.co.uk' target='_blank' >$1</a>");

}

现在这适用于简单的测试数据,但我现在需要弄清楚如何扩展功能。

我的c#app中有一个术语列表,以及相关的网址。我正在考虑将这些数据作为一个字符串传递,然后拆分,但是我的javascript知识有很多漏洞。

所以我想我有3个问题:

  1. 如何在加载页面时将我的字符串放入函数中?
  2. 字符串是正确的类型还是我可以传递其他字典对象?
  3. 如何有效地遍历每个传递的术语?
  4. 提前致谢。

5 个答案:

答案 0 :(得分:1)

您可以使用JQuery Ajax调用来检索服务器端数据。

但这需要您设置可能会暴露的服务。您可以通过快捷方式完成设置服务。

但这需要凌乱的逻辑。(这是一个捷径:))

您可以在页面中创建一个属性,将JSON数据公开为字符串。您可以按照

在javascript中读取JSON数据
var data =<% GetData() %>

您可以在对象上定义ToJson以将对象转换为JSON String

    public static string ToJSON(this object obj)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer(new SimpleTypeResolver());
        return serializer.Serialize(obj);
    }

public string GetData()
{
    return (new {SomeData}).ToJson();
}

注意SomeData是一个包含数据的类(即url数组)或者你选择的代表。

然后循环数据以构建动态html

答案 1 :(得分:1)

@Anand说的是你可以使用jQuery Ajax来检索服务器端数据。

但是,根据您想要做的确切内容,您可以采用其他方式。

您可以使用.net JavascriptSerializer类将数据序列化为JSON格式。如果您还不熟悉JSON,那么JSON是一个非常好的工具。

JavascriptSerializer会将您的JSON放入一个字符串中,然后您可以将其放入隐藏的输入中并使用您的Javascript代码进行读取。这样做的好处是不需要第二个HTTP请求,就像jQuery Ajax一样。

答案 2 :(得分:1)

另一种可能的方法是在C#代码中在页面加载时编写javascript函数。然后,它将在呈现时添加到页面中,并可由document.ready()上的jQuery执行;或任何其他功能/事件。

示例代码:

    string FunctionStr = "<script type=\"text\javascript\">function textToLinks(text) {" +
        "var exp = /(my text)/ig;" +
        "return text.replace(exp, \"<a class='link' href='http://www.bbc.co.uk' target='_blank' >$1</a>\");" +
        "}</script>";

    this.ClientScript.RegisterClientScriptBlock(this.GetType(), "Some JS Function", FunctionStr);

Anand和Daniel的答案可能更适合您想要的方法,但如果您愿意,这是第三种选择。

答案 3 :(得分:1)

你可以这样做:

将公共成员声明为

背后代码的C#类
public string mystring;

在Init或Load Event中启动它 并在你的js函数上写下

var exp = '<%=mystring %>';

它应该适用于字符串。对于Dictionnary,您可以尝试执行Ajax

答案 4 :(得分:0)

如果您在加载页面时提前获得了数据,则可以直接将JSON写入页面,然后使用该javascript对象执行您需要的任何操作。

我不知道你是使用MVC还是WebForms,但这个想法基本相同:

例如(使用JSON.NET进行序列化):

<script id="some-data" type="application/json">
    <%= JsonConvert.SerializeObject(someDotNetObject) %>
</script>

<script type="text/javascript">
    var _someJsObject = JSON.parse(document.getElementById("some-data").innerHTML);
</script>

现在_someJsObject是一个表示您开始使用的数据的javascript对象,您可以随意使用它,例如循环遍历数组等。

附注 - 如果您的目标是IE7,则需要使用类似json2.js的内容来获取JSON解析。