Я пытаюсь обновить программу просмотра 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.
Любая помощь с благодарностью, и заранее спасибо за ваше время.