0

私の状況を説明する前に、非常に重要な通知をご覧ください!

1.私のJavaScriptは.aspxファイルに埋め込まれていないので、

    var strMessage = '<%= str%>';
    StartGeocoding(strMessage);

動作していません(たくさん試しましたが、改善できる場合はお知らせください)

2.また、私はすでに使用しました

    Page.ClientScript.RegisterStartupScript( , , , )

機能があるので、2回使用することは許されていないと思います。

================================================== ==============

したがって、ここでは「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」という文字列を1つ持つ代わりに、文字列のリストを作成することもできます。

    <list>Locationlist        //not array

したがって、LoadMap()関数の'count'は、私が持っているエントリの数を認識します。javascriptから各位置情報を取得するにはどうすればよいですか?これは可能ですか?何か案が?

4

2 に答える 2

1

基本的に2つのオプションがあります。

1.)コードビハインドからページにデータを出力します。たとえばhiddenfieldにデータを出力し、javascriptを使用してこれらの値を取得します(非常に簡単です)

2.)ajaxを使用し、必要に応じて値を取得します

于 2012-06-07T20:51:40.113 に答える
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クラスを使用するには、ファイルの先頭に「usingSystem.Text」を追加する必要があります。

  • System.Web.HttpUtility.JavaScriptStringEncodeは、サーバー側の文字列が正しくエンコードされていることを確認するために必要です(C#文字列をJavascript文字列にエンコードする警告から取得)。私の理解では、.Net4でのみ利用可能です。

  • ページにScriptManagerがある場合は、Page.ClientScriptのメソッドではなく、ScriptManagerでRegisterStartupScriptを使用するのが最適です。

現在、上記のコードをテストすることはできませんが、基本的なアイデアを取得する必要があります。

于 2012-06-07T22:03:55.963 に答える