多次在代码隐藏(c#)中执行javascript函数

多次在代码隐藏(c#)中执行javascript函数,javascript,c#,jquery,Javascript,C#,Jquery,我有一个datatable,每行需要执行一个javascript函数(相同的javascript函数,但值不同) 对于每一行,它执行一个javascript函数,并将结果返回给代码隐藏(trought web方法) 但是,在我的实际代码中,函数只执行一次(表的第一行) 我有这个: c# javascript <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true&librarie

我有一个datatable,每行需要执行一个javascript函数(相同的javascript函数,但值不同)

对于每一行,它执行一个javascript函数,并将结果返回给代码隐藏(trought web方法)

但是,在我的实际代码中,函数只执行一次(表的第一行)

我有这个: c#

javascript

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true&libraries=places"></script>
var map, service;
function GetInfoGMaps(name, latitude, longitude) {
    var loc= null;
    if (latitude != "" && longitude != "") {
        loc  = new google.maps.LatLng(latitude, longitude);
    }

    map = new google.maps.Map(document.getElementById('map-canvas'), {
        center: loc,
        zoom: 15
    });

    service = new google.maps.places.PlacesService(map);

    var request = {location: loc, radius: 50000, keyword: name};

    service.radarSearch(request, callback); // i got the data and i sent to c# trought ajax
}
我试图在控制台(ChromeWebBrowser)中执行strString,但是我没有定义,我不明白为什么。当我运行radarSearch函数时,似乎给出了未定义的结果

GetInfoGMaps('Mak Albania Resort Durres',41.2314605712891,19.5132293701172);
GetInfoGMaps('Mak Albania Resort Durres',41.2314605712891,19.5132293701172);
GetInfoGMaps('Mak Albania Resort Durres',41.2314605712891,19.5132293701172);
有人能帮我吗

感谢

根据,每个启动脚本都由其键和类型唯一标识。具有相同键和类型的脚本被视为重复脚本。向每个键添加唯一值,如下所示

int i = 0;
foreach (DataRow row in dtTable.Rows) {
    ClientScript.RegisterStartupScript(GetType(), "GetInfoGMaps" + i, "GetInfoGMaps('" + row["Name"].ToString() + "'," + row["Latitude"].ToString().Replace(",", ".") + "," + row["Longitude"].ToString().Replace(",", ".")");", true);
    i++;
}
  • ClientScript应该在foreach循环之外,因为您注册了GetInfoGMapsN行

  • foreach首先创建脚本字符串

    • 清除/escape
      char以避免破坏javascript
  • 它还有另一个好处:您可以在发送客户端之前中断脚本字符串
例如:

string strScript = "";

foreach (DataRow row in dtTable.Rows) {
   strScript = strScript + "\n" +  "GetInfoGMaps('" + row["Name"].ToString() + "'," + row["Latitude"].ToString().Replace(",", ".") + "," + row["Longitude"].ToString().Replace(",", ".")");";

}
//clean/escape ' char to avoid breaking your script
clientScript = clientScript.Replace("'", "\'")

// now it may be ok :
ClientScript.RegisterStartupScript(GetType(), "GetInfoGMaps", clientScript, true);

无法在visual studio(现在在Mac上)上检查我的代码,因此它可能包含错误,但idea在这里。要一个贴图还是多个贴图?仅一个贴图。目标是访问某些地方的详细信息。这是一样的。strString以正确的迭代次数出现,但只执行最后一行。我的strString示例:GetInfoGMaps('Lido Hotel Durres'41.322681427002,19.4581604003906,25);GetInfoGMaps(‘阿波罗尼亚杜勒斯酒店’41.31354123535,19.4765796661377,33);GetInfoGMaps('Mak阿尔巴尼亚度假酒店杜雷斯'41.2314605712891,19.5132293701172,56);很难看到。我将console.log我的javascript以尝试解释为什么它不能像所希望的那样工作。我尝试过使用您的脚本,但遇到了一个错误:
找不到您的名字
。我看不到你的,但我使用了这项服务:
对不起,我的错误。我更新了我的代码,但是的,这是谷歌的地方脚本。它是一样的。只执行最后一行。检查
GetInfoGMaps
方法是否有任何问题。。可能每次迭代都会覆盖上一次。我更新了代码。我使用了console.log,我认为我的错误在radarSearch函数中,但我不明白为什么。
int i = 0;
foreach (DataRow row in dtTable.Rows) {
    ClientScript.RegisterStartupScript(GetType(), "GetInfoGMaps" + i, "GetInfoGMaps('" + row["Name"].ToString() + "'," + row["Latitude"].ToString().Replace(",", ".") + "," + row["Longitude"].ToString().Replace(",", ".")");", true);
    i++;
}
string strScript = "";

foreach (DataRow row in dtTable.Rows) {
   strScript = strScript + "\n" +  "GetInfoGMaps('" + row["Name"].ToString() + "'," + row["Latitude"].ToString().Replace(",", ".") + "," + row["Longitude"].ToString().Replace(",", ".")");";

}
//clean/escape ' char to avoid breaking your script
clientScript = clientScript.Replace("'", "\'")

// now it may be ok :
ClientScript.RegisterStartupScript(GetType(), "GetInfoGMaps", clientScript, true);