2010-07-13 2 views
1

일부지도가있는 Silverlight 응용 프로그램이 있고이 응용 프로그램이 실행중인 동일한 페이지에지도 관련 값을 설명하는 표가 있습니다. 지도에서 아이콘 위로 마우스를 가져 가면 해당 ID가있는 행이 강조 표시됩니다. 그게 가능한가? ASP MVC에서 간단한 ASP 테이블을 사용하고 있습니다.Silverlight 응용 프로그램에서 ASP 페이지에서 자바 스크립트를 트리거하는 방법이 있습니까?

실버

 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); 



      } 
     } 

내가 뭔가 잘못하고 있어요 경우

<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> 

당신이 말해 줄 수 영문 :

는 AnthonyWJones의 지시에 따라,이했다?를 나는 그것을 실행하려했지만 작동하지 않았다.

+0

이상하게 보이는 한 가지 점은 올바르게 보이지 않는'(int) button.DataContext'를 사용하는 것입니다. 당신은 "효과가 없다"라고 확장 할 수 있습니다. 그것은 무엇을합니까? javascropt 디버깅을 시도 했습니까? 예외가 발생합니까? – AnthonyWJones

답변

2

이렇게하는 데는 몇 가지 방법이 있습니다. 가장 쉬운 방법은 단순히 HtmlPage.Window을 사용하는 것입니다 : -

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

a를 자바 스크립트를 포함 할 수 있습니다 포함하는 페이지 -

이 실버 라이트 애플리케이션 월 페이지 사이의 긴밀한 결합을 만들어 물론
function someJSFuncName(theID) 
{ 
    // Do Stuff with theID 

} 

바람직하지 않다. 다른 옵션은 HtmlPage.RegisterScriptableObject을 사용하면 더 복잡합니다. 상당히 지저분하므로 호스트 페이지에서 XAP의 연결을 해제해야하는 경우에만 권장합니다.

+0

위에 표시된 코드가 작동하지 않았습니다 (이유를 모르겠다). 그러나 MouseOver 메서드를 만들었을 때 제대로 작동했습니다! 감사합니다. –

+0

다른 방법으로도 가능합니까? 내 말은 ... 자바 스크립트가 실버 라이트 호출에서 속성을 설정 했으므로 테이블을 마우스로 올리면 실버 라이트 애플리케이션이 주어진 지점을 강조 표시한다는 의미입니다. –

+0

나를 위해 그것은 메소드를 호출 할 수 없다는 말을 계속했다. 그러나 자바 스크립트 콘솔을 살펴보면 코드에 js 오류가있다. 다른 사람이 같은 문제가있는 경우에 대비하여 언급하고 싶습니다. – Aligned

관련 문제