車の情報まとめアプリ06(車両情報_ASP.NET(ScriptManager)とJavascript)

■車両情報の表示について修正する。
前回でひとまず下のようにHTMLのボタンを押して、画面上に車両情報を出せるところまでできた。車両情報は2つ目のドロップダウンリストを操作することで、HiddenFieldに入れて、そこに入った情報を取り出すようにしている。ただ、この方法の場合、2つ目のドロップダウンリストに入っている情報が1つだけの時、リストの値を変更できないので情報が入らない問題がある。そのため、やはりボタンを押して情報を取得、表示できないか見てみる。

Webで調べると、ASP.NETのボタンから javascript の function を実行する方法や、javascript の中でASP.NETの function を実行する方法などがあった。

ASP.NETのボタンから実行する方法では、ScriptManager を追加した後、下のように<script></script>内で addHandler を使ってASP.NETのボタンと javascript 内の function を紐づける。

    <script language="javascript" src="Scripts/jquery-3.4.1.min.js"></script>
    <script>

        function pageLoad() {
            Sys.UI.DomEvent.addHandler($get("Button1"), "click", popupVehicleSpec);
        }

        function popupVehicleSpec() {
            window.alert("ababababababab")
            let vehicleName = document.getElementById('<%= DropDownList2.ClientID %>').value
            let sampleData = PageMethods.getVehicleSpec(vehicleName);
    以下省略

この方法の場合、Button1 のASP.NETの function が上書きされるようで、それは実行されなくなる。

javascript からASP.NETの function を実行する方法では、ScriptManagerのプロパティEnablePageMethods をTrueにした後、

javascript (<script></script>内)とASP.NETに下のようなコードを入れた。

javascript

  let sampleData = PageMethods.getVehicleSpec(vehicleName);

ASP. NET

  <System.Web.Services.WebMethod(True)>
    Public Shared Function getVehicleSpec(ByVal vehicleName As String) As String
        Dim vehicleSpec As String = ""
    途中省略
        Return vehicleSpec
    End Function

ここで javascript からASP.NET内の getVehicleSpec が呼び出され、Returnで戻った値が sampleData に入る。これも ScriptManager が必須。

これらを使って、ボタンを押した後に、ASP.NETから情報を取得し javascript で表示といったことができるはず。

実際に動かしてみるとデータがうまく取得できない。おそらく、ASP.NET側へデータ送信した後、それが返ってくるのを待たずに次へ進むためかと思う。この辺りをもう少し調べてみる。

ScriptManager は、.net framework 3.5 から出てきている技術で相当古いだろうけど、今はもっと便利なフレームワークとかあるのかな。