Почему мои функции JavaScript, которые должны быть запущены TreeView selectednodechanged, не работают? - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь обновить программу просмотра Krpano для конкретной сцены на основе выбора из множества TreeView. У меня есть функция JavaScript, которая должна запускаться всякий раз, когда происходит событие TreeView SelectedNodeChanged, но оно просто пропускает его. Я исследовал Page.Client.RegisterStartupScript, и мне явно что-то не хватает, насколько я могу судить, я правильно его реализовал. Что я делаю не так?

Pano Viewer загружается, как ожидается, с правильной сценой, но не обновляется, когда выбраны узлы. Правильное имя сцены генерируется и вводится, но сцена не меняется.

Вот код для одного из древовидных представлений из .aspx.cs:

protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
    {
        TreeView tv1 = (TreeView)UpdatePanel1.FindControl("TreeView1");
        TreeView tv2 = (TreeView)UpdatePanel1.FindControl("TreeView2");
        TreeView tv3 = (TreeView)UpdatePanel1.FindControl("TreeView3");
        string sceneID = tv1.SelectedNode.Value + tv2.SelectedNode.Value + tv3.SelectedNode.Value;
        if (sceneID == "1A2A3A")
        {
            sceneID = "scene_PanoImg10a";
        }
        else if (sceneID == "1B2A3A") { sceneID = "scene_PanoImg02a"; }
        else if (sceneID == "1A2B3A") { sceneID = "scene_PanoImg09a"; }
        else if (sceneID == "1A2A3B") { sceneID = "scene_PanoImg01a"; }
        else if (sceneID == "1B2B3A") { sceneID = "scene_PanoImg08a"; }
        else if (sceneID == "1B2A3B") { sceneID = "scene_PanoImg04a"; }
        else if (sceneID == "1A2B3B") { sceneID = "scene_PanoImg03a"; }
        else if (sceneID == "1B2B3B") { sceneID = "scene_PanoImg06a"; }

        Page.ClientScript.RegisterStartupScript(GetType(), "updatePano", "updatePano(" + sceneID + ")");


    }

А вот .aspx с двумя TreeViews для краткости:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">

    <div class="container-fluid">

        <script src="Krpano/vtour/tour.js"></script>

        <script>
            window.onload = function () {
                if (sessionStorage.getItem("runOnce") === null) {
                    alert("InitialPano fired")
                        embedpano({ swf: null, xml: "Krpano/vtour/tour.xml", target: "pano1", localfallback: "http://localhost:8090", html5: "auto" });
                    var krpano1 = document.getElementById("krpanoSWFObject");
                    krpano1.call("loadpanoscene('tour.xml', 'scene_PanoImg10a', null, null, NOBLEND);");
                    this.sessionStorage.setItem("runOnce", true);
                }
            }
        </script>

        <div class="row">
            <div class="col-sm-3">
                <h3>Hello from col 1</h3>
                <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                    <ContentTemplate>
                     <asp:TreeView ID="TreeView1" runat="server" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" SelectedNodeStyle-BackColor="#FF9900">
                    <Nodes>
                        <asp:TreeNode Text="Option Set 1" SelectAction="None">
                            <asp:TreeNode Text="Option A" Value="1A"></asp:TreeNode>
                            <asp:TreeNode Text="Option B" Value="1B"></asp:TreeNode>
                        </asp:TreeNode>
                    </Nodes>
                </asp:TreeView>

                <asp:Label ID="Label1" runat="server" Text="Label" Visible="false"></asp:Label>
                        </ContentTemplate>
                </asp:UpdatePanel>


            </div>

            <div class="col-sm-9" id="pano1" style="height:800px">
                <h3>Hello from col 2</h3>



                <script>
                     function updatePano(sceneID)
                     { 
                         alert("updatePano Fired")

                         alert(sceneID)
                         var krpano1 = document.getElementById("krpanoSWFObject");
                         krpano1.call("loadpanoscene('tour.xml', " +sceneID+ ", null, null, NOBLEND);");
                        }
                </script>

            </div>
        </div>
    </div>


</asp:Content>

Я ожидаю, что сцена изменится на ту, которая указана в сгенерированном sceneID, но она останется на сцене, загруженной в функцию window.onload. Любая помощь с благодарностью, и заранее спасибо за ваше время.

...