0

我有一个我想在页面加载时运行的函数,所以在 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# 应用程序中有一个术语列表,以及相关的 url。我正在考虑将这些数据作为字符串传递,然后拆分,但是我的 javascript 知识有很多漏洞。

所以我想我有3个问题:

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

提前致谢。

4

5 回答 5

2

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

但这需要您设置将公开的服务。您可以在不设置服务的情况下以快捷方式完成此操作。

但这需要混乱的逻辑。(它的捷径:))

您可以在页面中创建一个属性,将 JSON 数据公开为字符串。您可以通过以下方式在您的 javascript 中读取 JSON 数据

var data =<% GetData() %>

您可以在对象上定义 ToJson 以将对象转换为 JSON 字符串

    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

于 2013-09-24T15:39:32.680 回答
1

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

示例代码:

    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 的答案可能更适合您所需的方法,但如果您愿意,这是第三种选择。

于 2013-09-24T15:48:11.077 回答
1

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

但是,根据您想要做什么,您也许可以用另一种方式来做。

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

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

于 2013-09-24T15:44:19.530 回答
1

如果您在页面加载时提前获得了数据,您可以将 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>

Now_someJsObject是一个 javascript 对象,表示您开始使用的数据,您可以使用它做任何您想做的事情,例如循环遍历数组等。

旁注 - 如果您的目标是 IE7,则需要使用json2.js之类的东西来获取 JSON 解析。

于 2013-09-24T15:45:12.217 回答
1

你可以这样做:

在代码后面的 C# 类中声明公共成员

public string mystring;

在 Init 或 Load Event 中启动它并将其写入您的 js 函数

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

它应该适用于字符串。对于字典,你可以尝试做 Ajax

于 2013-09-24T20:04:28.860 回答