Есть ли способ, чтобы приложение Silverlight вызывало JavaScript на странице ASP? - PullRequest
1 голос
/ 13 июля 2010

У меня есть приложение Silverlight с некоторыми картами, и на той же странице это приложение работает, у меня есть таблица, в которой описаны значения, связанные с картой. Я хочу создать способ, при котором при наведении мыши на какой-либо значок на карте будет выделена строка с соответствующим идентификатором. Это вообще возможно? Я использую простые таблицы asp на ASP MVC.

Следуя инструкциям AnthonyWJones, я сделал это:

Silverlight

        private void MapClick(object sender, RoutedEventArgs e)
        {
            for (int i = 0; i < 4; i++)
            {
                System.Windows.Controls.Primitives.ButtonBase button = (System.Windows.Controls.Primitives.ButtonBase)VisualTreeHelper.GetChild(RegionCanvas, i);
                if (button.IsPressed)
                    HtmlPage.Window.Invoke("highlightRow",(int)button.DataContext);



            }
        }

ASPX

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

<script type="text/javascript">
    function highlightRow(id) {
        id = "porto" + id;
        document.getElementById(id).setAttribute("bgColor", "#123456");
    }
</script>


<%try{ %>
         <h2><%:(String) Model.FirstOrDefault().estado%></h2>   
          <%} %>
    <%catch (Exception e) { }%>


   <table id="tblLayout">
   <tr>
   <td><div style="height:300px"> 

        <object data="data:application/x-silverlight-2," 
            type="application/x-silverlight-2" height="300px" style="width: 400px">


          <param name="source" value="/ClientBin/MiniSIG.xap"/>

          <param name="onError" value="onSilverlightError" />
          <param name="background" value="white" />
          <param name="minRuntimeVersion" value="3.0.40818.0" />
          <%try{ %>
            <param name="initParams" value="startPage=<%:(String) Model.FirstOrDefault().estado%>" />
          <%} %>

          <%catch (Exception e) { }%>


          <%finally{
                if(Model.FirstOrDefault() == null){%>
            <param name="initParams" value="startPage=main" /> 
          <%} }%>
          <param name="autoUpgrade" value="true" />
          <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40818.0" style="text-decoration:none">
              <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
          </a>
        </object>

    </div> </td>
   <td><table>
        <tr>
            <th>
                ID do Porto
            </th>
            <th>
                Nome
            </th>

            <th>
            Cidade
            </th>
            <th>
                ID da Cidade
            </th>
            <th>
                Tipo
            </th>
        </tr>

    <% foreach (var item in Model) { %>

        <tr id="porto<%: item.idporto %>">

            <td>
                <%: item.idporto %>
            </td>
            <td>
                <%: Html.ActionLink(item.nome, "../Portos/Details/"+item.idporto)%>
            </td>

            <td>
                <%: item.municipio %>
            </td>
            <td><%: item.idcidade %></td>
            <td>
                <%: item.tipo %>
            </td>
        </tr>

    <% } %>

    </table></td>
   </tr>

    </table>

    <p>
        <%: Html.ActionLink("Voltar", "Index") %>
    </p>

</asp:Content>

Можете ли вы сказать мне, если я делаю что-то не так? Я пытался запустить его, но это не сработало.

1 Ответ

2 голосов
/ 13 июля 2010

Есть несколько способов сделать это. Проще всего было бы просто использовать HtmlPage.Window: -

HtmlPage.Window.Invoke("someJSFuncName", myID);

Содержащая страница может содержать Javascript: -

function someJSFuncName(theID)
{
    // Do Stuff with theID

}

Конечно, это создает тесную связь между приложением Silverlight и страницей, что может быть нежелательно. Другой вариант более сложный, используя HtmlPage.RegisterScriptableObject. Это довольно грязно, поэтому я бы порекомендовал его, только если вам действительно нужно удалить пару XAP со страницы хоста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...