【问题标题】:How do I pass data from c# to jquery/javascript?如何将数据从 c# 传递到 jquery/javascript?
【发布时间】:2013-09-24 15:36:58
【问题描述】:

我想在页面加载时运行一个函数,所以可以在 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. 如何有效地遍历每个传递的术语?

提前致谢。

【问题讨论】:

  • 我已经检查过了 - 它不是重复的,因为此线程中已经有其他答案。

标签: c# javascript jquery


【解决方案1】:

您可以做的是,使用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

【讨论】:

    【解决方案2】:

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

    但是,根据您想要做什么,您也许可以通过其他方式进行。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 但是我该如何整合呢?抱歉,但我的 ajax/javascript/jquery 知识很薄弱。
      • 很难说 - 我不太清楚你实际上在用这个对象做什么。如果您尝试这样做,您将能够使用调试器检查您的 JSON 和您的 javascript 对象,并希望这将指导您如何处理它。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        你可以这样做:

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

        public string mystring;
        

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

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

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

        【讨论】:

          猜你喜欢
          • 2013-01-28
          • 2019-08-07
          • 2011-04-29
          • 2020-02-23
          • 2014-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-28
          相关资源
          最近更新 更多