質問者
jscriptで配列の取得

質問
-
vb.net:2003 webform
iis:6.0
いつもお世話になっております。
vb.netサイドで作成した配列をjscriptサイドで読込たいのですが、うまく行きません。
いろいろ調べていたらVBArrayオブジェクトを使えば取得できるみたいなのですが、
配列を取得するところで、落ちているみたいです。
取得の仕方は、
var jsstrCity = (new VBArray(strCity)).toarray();
vb.netサイドの配列の設定は、
dim strCity() as string
でやっております。
デバッグでみるとjscriptサイドで取得するstrCityが、system.string[]になっております。
無理なようであれば、別の方法を考えます。
よろしくお願いします。
すべての返信
-
例えば
public a() as string = (東京,千葉,埼玉,神奈川)
って情報をvbサイドで持っております。
jscriptサイドで
b = a(1);
で取得すると、bには、「千葉」が取得出来ています。
ちなみにループを使って取得しますと
for (i = 0 ;i< 3 ;i++){b = a(i);}
iが宣言されていません表示されます。
vbサイドでiを宣言すれば動きますが、iは、つねに0になります。
ClientScriptManager.RegisterClientScriptBlockを調べて見たのですが、使うとちょっと大変な事になります。
配列の個数は7個でその最大要素が約3万件になります。
なので、vbの配列をjscriptサイドで取得できないかを悩んでおります。
よろしくお願いします。
-
A*():サーバーサイド配列
B*():クライアントサイド配列
サーバーサイド
Page_Loadにテキストファイル→A1()~A7()の配列に保存
クライアントサイド
A1()→B1()→ドロップダウンリスト1に追加
ドロップダウンリスト1を変更したら
A4()・A5()→B4()・B5()から情報を取得
取得した情報から、A2()→B2()→ドロップダウンリスト2に追加
ドロップダウンリスト2を変更したら
A6()・A7()→B6()・B7()から情報を取得
取得した情報から、A3→B3()→ドロップダウンリスト3に追加
但し、3つのドロップダウンリストは連動しています。
こうする事によってドロップダウンリスト変更時にポストバックが走らなくなります。
今現在、A1()→B1()を入れるところで詰まっております。
取得方法は、以下の通りです。
var B1= (new VBArray(<%= A1%>)).toarray();
よろしくお願いします。
-
html上は、var jsstrCity = (new VBArray(strCity)).toArray();なっています。
実行すると、赤い部分に変わります。
そこが、おかしいため、取得出来ません。
よろしくお願いします
クライアントサイド
function on_load()
{
document.Form1.ddlAddress01.focus();Change_Color("tr1",0);
set_dropdown1();
}function set_dropdown1(){
var wCnt;
var jswCity = 7;
var jsstrCity = (new VBArray(System.String[])).toArray();document.Form1.ddlAddress01.remove(0);
document.Form1.ddlAddress01.options[0] = new Option("--選択してください--");for (wCnt = 1 ; wCnt <= jswCity ; wCnt++){
document.Form1.ddlAddress01.options[wCnt] = new Option(jsstrCity[wCnt]);
}
}function set_dropdown2(){
var wCnt;
var jswTown = 613;
var jsstrTown = (new VBArray(System.String[])).toArray();
var jsstrCityFrom = (new VBArray(System.Int64[])).toArray();
var jsstrCityTo = (new VBArray(System.Int64[])).toArray();
var wIdx;
var wEnd;wIdx = document.Form1.ddlAddress01.selectedIndex;
do{
document.Form1.ddlAddress02.remove(0);
}while(document.Form1.ddlAddress02.options.length > 0)document.Form1.ddlAddress02.options[0] = new Option("--選択してください--");
if (wIdx == 0){ return;}
var wFrom = parseInt(jsstrCityFrom[wIdx]);
var wTo = parseInt(jsstrCityTo[wIdx]);wCnt = 1;
wEnd = wFrom + wTo - 1;
for (wFrom ; wFrom <= wEnd ; wFrom++){
document.Form1.ddlAddress02.options[wCnt] = new Option(jsstrTown[wFrom]);
wCnt++;
}
}function on_SelectChange(strId){
switch(strId){
case 1:
//document.Form1.ddlAddress02.disabled = true;
//document.Form1.ddlAddress03.disabled = true;
set_dropdown2()
break;
case 2:
document.Form1.ddlAddress01.disabled = true;
document.Form1.ddlAddress03.disabled = true;
break;
case 3:
document.Form1.ddlAddress01.disabled = true;
document.Form1.ddlAddress02.disabled = true;
break;
}
}サーバーサイドを載せようとしたら文字化けしてしまいました。
やっていることは、
strCityを配列宣言(Public)して、
テキストファイルから配列に代入しています。
-
配列をそのまま
A1.ToString()
としてみてください。
System.String[]
となるはずです。
やりたいことをするためには自分で、展開する必要があります。
以下イメージ
Dim sb As New StringBuilder
Dim CommaFlag As Boolean = Falseforeach aa in A1
If ( CommaFlag = True ) Then
sb.Add(",")
CommaFlag = True
End If
sb.Add(aa)
Next
" var jsstrTown = (new VBArray(" & sb.ToString() & )).toArray();" -
どうやら一般的には、
ClientScriptManager.RegisterArrayDeclaration メソッド
http://msdn2.microsoft.com/ja-jp/library/system.web.ui.clientscriptmanager.registerarraydeclaration.aspxでやるようなんですが、今回は配列が多くてちょっとつらいかもしれませんね・・・
-
1.1だと、ちなみに以下になります。
Page.RegisterArrayDeclaration メソッド
http://msdn2.microsoft.com/ja-jp/library/system.web.ui.page.registerarraydeclaration.aspxが、大量データなんで難しいということですよね。いずれにしてもjavascriptから配列が読めるように、サーバーサイドから配列をそのままクライアントサイドに渡してあげる必要があると思います。VBArrayは使ったことがなく、調べてみたんですが、たぶん、同じパソコン上での話ではないでしょうか?(違ってたらすみません)
あと、私は試した事がありませんが、javascriptからwebサービスを呼べたと思うので、それを利用する方法があるかもしれません。あくまで推測、および思いつきで申し訳ありません。