2009-11-05 5 views
0

어떻게 할 수 있는지 궁금합니다. 컨트롤이 상주하는 Asp.net 페이지 내에서 사용할 수있는 Silverlight 컨트롤 내에 대리자 메서드를 만드는 방법이 있습니까?asp.net 페이지에서 사용할 수있는 이벤트를 Silverlight 컨트롤에서 시작할 수 있습니까?

예를 들어 사용자의 정보 (예 : 이름, 나이 등)를 요구하는 Silverlight 컨트롤을 만들고 있다고 가정 할 때 ASP에서 Silverlight 컨트롤의 click 이벤트에 어떻게 든 바인딩 할 수있는 방법이 있습니다. 그것이 앉아있는 net 페이지를 열고 Silverlight 컨트롤에서 정보를 얻으시겠습니까?

답변

1

당신이 묻는 것을 할 수는 있지만 ASP.Net과는별로 관련이 없습니다. Silverlight는 클라이언트에서 실행되기 때문에 Silverlight에서 click 이벤트를 사용하면 html 내용이 업데이트됩니다. 그런 다음 다시 게시 할 때 해당 데이터를 ASP.Net으로 보낼 수 있습니다.

정당한 이유가없는 한, 아마도 최선의 방법이 아닙니다. ASP.Net 대신 웹 서비스를 사용하여 데이터를 웹 서버로 다시 보내는 것이 더 나을 것입니다.

+0

좋은 점 (들). 내 컨트롤이 "재사용"미래에 페이지에 앉아 있지만, 생각하면 이제는 생각, asp.net 페이지에서 뭔가를 트리거하는 유일한 방법은 HTML 업데이트 또는 Javascript 것입니다. 트리거링. 컨트롤을 독립 실행 형으로 두는 것이 가장 좋습니다. –

1

Javascript 이벤트를 등록하고 수동으로 내 서버 컨트롤을 다시 호출했습니다.

<asp:Silverlight runat="server" ID="SilverlightUpload" 
    Source="~/ClientBin/Silverlight.xap" OnPluginLoaded="pluginLoaded" /> 
<asp:Button runat="server" OnClientClick="return cancelUpload()" Text="Cancel" /> 

<script type="text/javascript"> 

    var uploadControl = null; 
    function pluginLoaded(sender) { 
     uploadControl = sender.get_element().content.uploadControl; 
     uploadControl.addEventListener("OnFileListChanged", onFileListChanged); 
    } 

    function onFileListChanged(sender, e) { 
     var files = []; 
     for (var i = 0; i < e.Files.length; i++) { 
      files[i] = { 
       Id  : e.Files[i].Id, 
       Name : e.Files[i].Name 
      }; 
     } 
     __doPostBack("<%= RadGrid1.UniqueID %>", 
        "OnFileListChanged:" + JSON.stringify(files)); 
    } 

    function cancelUpload() { 
     $find("<%= SilverlightUpload.ClientID %>") 
      .get_element().content.uploadControl.StopUpload(); 
     return false; 
    } 

</script> 

그리고 실버 라이트 코드 숨김 : 아래의 몇 가지 중요한 부분

[ScriptableType] // MUST 
public partial class Page : UserControl 
{ 
    [ScriptableMember] // MUST 
    public event EventHandler<FileListChangedEventArgs> OnFileListChanged; 

    [ScriptableMember] // MUST 
    public void StopUpload() { } 
} 

[ScriptableType] 
public class FileListChangedEventArgs : EventArgs 
{ 
    public FileUploadItem[] Files { get; internal set; } 
} 

[DataContract] 
[ScriptableType] 
public class FileUploadItem 
{ 
} 
+0

아주 멋지다. 나는 이것을 시험해 보겠다. –

관련 문제