【问题标题】:Communicating back and forth between Javascript and c#在 Javascript 和 c# 之间来回通信
【发布时间】:2014-12-03 13:13:17
【问题描述】:

我正在尝试用 c# 编写代码,该代码从数据库中检索数据并将该数据传递给 javascript(在循环中一次一条记录),以便通过 google map api 进行处理。该javascript返回一个字符串列表,我用它来进行进一步处理并通过c#保存到db。

直到现在我才意识到,即使我们在循环中编写了 javascript 函数,它也只会被调用一次。此外,我什至不知道如何从 javascript 返回字符串列表并在 c# 中使用它。

我对此非常困惑。能否请教一个好的有效的方法?

谢谢。

这是我写的代码,但是没有用。

foreach (LocationDataPacket d in l)
            {

                if (d.cellPhoneGPSData == current_cell)
                {
                      lat1 = lat2;
                      long1 = long2;

                      lat2 = d.Lat;
                      long2 = d.Long;
                      ScriptManager.RegisterStartupScript(this, GetType(), "check", "check("+d.ID+");", true);


                }
                else
                {
                    lat2 = d.Lat;
                    long2 = d.Long;
                    current_cell = d.cellPhoneGPSData;
                }
            }

【问题讨论】:

  • 什么版本的 .NET?对于“一个 ASP.NET”的变化,您是否足够及时,例如在与 Web API 和/或 SignalR 相同的 Web 应用程序中运行 WebForms(ScriptManager 表示 WebForms)。后两者都非常有能力来回转换 JSON 内容。
  • 我使用的是 .net 4.5 版本。我见过 SignalR 但还没有尝试过。到目前为止,我一直在尝试调用客户端函数,但不幸的是服务器端不会等待客户端并执行所有任务而无需多次调用客户端代码
  • 整个WebForms模型试图隐藏HTTP底层的无状态。但是,要让处理从服务器切换到客户端并返回,您将不得不撤消该抽象。
  • C# 执行发生在服务器上。 Javascript 执行发生在客户端。您确定客户需要参与其中吗?听起来您正在尝试执行一个纯粹基于服务器的进程:1)从服务器本地数据库获取 data1,2)使用 data1 从 Internet 源获取 data2,3)将 data2 保存到服务器本地数据库。
  • @pseudocoder 我认为您正确理解了这个问题。 Google Map Api 是基于 javascript 的,因此我使用它的 api 来获取一些与我在 db 中的数据相关的数据。我认为我除了做我正在做的事情之外别无选择

标签: javascript c# asp.net web-services google-maps-api-3


【解决方案1】:

我在 Google 上搜索了“从 .net 客户端访问 google maps api”,它引导我找到了适用于 .NET 的 Google APIs 客户端库:

https://developers.google.com/api-client-library/dotnet/

我假设这将允许您的 .net 程序(根据您的要求甚至可能不必在 asp.net 服务器上运行)成为直接的 google map API 客户端,因此您可以在本地进行所有这些处理。

编辑:解决您的原始问题,为了将数据从客户端获取回您的网络服务器,客户端需要回发信息。这个问题似乎很好地涵盖了这一点:Send javascript variables to server-side ASP .NET。但是,我不建议根据您所说的要完成的任务来尝试此操作。我会先尝试 API 的 .NET 客户端库。

【讨论】:

    【解决方案2】:
    <script runat="server">
    foreach (LocationDataPacket d in l)
    {
      if (d.cellPhoneGPSData == current_cell)
      {
        lat1 = lat2;
        long1 = long2;
    
        lat2 = d.Lat;
        long2 = d.Long;
        ScriptManager.RegisterStartupScript(this, GetType(), "check", "check("+d.ID+");", true);
      }
      else
      {
        lat2 = d.Lat;
        long2 = d.Long;
        current_cell = d.cellPhoneGPSData;
      }
    }
    </script>
    

    将这些代码写入head Tag..希望这对你有帮助。

    【讨论】:

    • 你的意思是说我应该将我所有的 c# 代码粘贴到我的 aspx 页面的头部?你确定它会在那之后等待客户端代码吗?一旦我尝试在 javascript 代码中编写 c# 代码,并且所有 c# 代码在开始时执行而不等待 javascript 完成
    • 我提供了一个链接,您可以在其中使用所有 javascript 和 c# 通信方法实现这些
    【解决方案3】:

    在此链接中,您可以找到许多将值从 c# 转移到 javascript 的方法

    C# to javascript value transfer methods

    【讨论】:

      【解决方案4】:

      我在使用 Google 地图时遇到了类似的问题,并找到了使用 PageMethods 的解决方案,它同时以 json 格式返回所有数据,然后我将标记放在地图上。

      在我的情况下,我为收集数据而进行的下一次调用清除了地图上的先前点,并在每次调用时都放置了下一个集合(这是因为用户可以进行另一个选择来更改所有标记)但当然是如果可能的话,可以只添加新的标记。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-16
        相关资源
        最近更新 更多