在我解释我的情况之前,请看一下非常重要的通知!!
1.我的javascript没有嵌入.aspx文件,所以像
var strMessage = '<%= str%>';
StartGeocoding(strMessage);
不起作用(我尝试了很多,但如果你能改进它,请告诉我)
2.此外,我已经使用过
Page.ClientScript.RegisterStartupScript( , , , )
功能,所以我想我不允许两次使用。
=============================================== =================
所以,在这里 在“Location.js”(与.aspx分开)
function LoadMap(count) {
var asdf = (something variable from code-behind);
var counts = count;
myMap = new VEMap("mapDiv");
myMap.LoadMap();
StartGeocoding(asdf); // it will show the map with location info of "asdf"
}
在代码背后,有一些东西
public string blahblah = "1 Yonge Street"
基本上,我将从代码中获取地址,我将使用javascript显示它。 如果你(我的上帝!)可以教我如何从javascript中获取C#中的变量,那将非常感激!!!
如果你们想挑战,这里是奖金(?)问题
实际上,我将在地图中显示多个位置。因此,我可能有一个字符串列表,而不是有一个字符串“blahblah” <list>Locationlist //not array
因此,LoadMap()函数中的'count'将识别我有多少条目。如何从javascript获取每个位置信息?这可能吗?有什么想法吗?
答案 0 :(得分:1)
您基本上有两种选择:
1。)从代码隐藏输出数据到页面,让我们说到hiddenfield,然后使用javascript来检索这些值(这非常简单)
2。)使用ajax并根据需要获取值
答案 1 :(得分:1)
这就是我的想法。 在代码隐藏时,假设使用Page_Load方法,您可以使用以下代码:
List<string> locations = new List<string> { "1 Yonge Street", "100 Yonge Street", "123 Microsoft Way" };
//transform the list of locations into a javascript array.
//The generated script should look like window.myLocations = ['1 Yonge Street', '100 Yonge Street', etc];
StringBuilder script = new StringBuilder();
script.Append("window.myLocations = [");
foreach(string location in locations){
if(script.Length > 0){
script.Append(", ");
}
script.Append("'"+System.Web.HttpUtility.JavaScriptStringEncode(location) +"'");
}
script.Append("];");
//then register this script via RegisterStartupScript.
Page.ClientScript.RegisterStartupScript( this, this.GetType(), "registerMyLocations", script.ToString(), true);
此时您可以在Location.js中访问已注册的数组:
function LoadMap(/*count*/) {
var asdf = window.myLocations[0]; //this would be '1 Yonge Street' in your case
alert(asdf);
//var counts = count;
var counts = window.myLocations.length;
alert(counts);
myMap = new VEMap("mapDiv");
myMap.LoadMap();
StartGeocoding(asdf); // it will show the map with location info of "asdf"
}
一些评论:
要使用StringBuilder类,您需要在文件顶部添加“using System.Text”;
需要System.Web.HttpUtility.JavaScriptStringEncode以确保正确编码服务器端字符串(取自Caveats Encoding a C# string to a Javascript string)。根据我的理解,它仅在.Net 4中可用。
如果页面上有ScriptManager,最好使用ScriptManager上的RegisterStartupScript,而不是Page.ClientScript中的方法
我现在无法测试上面的代码,但你应该得到基本的ideea。