代码之家  ›  专栏  ›  技术社区  ›  Mark Kadlec

是否可以从可在ASP.NET页中使用的Silverlight控件启动事件?

  •  0
  • Mark Kadlec  · 技术社区  · 15 年前

    好奇这是怎么做到的。是否有任何方法可以在可在控件所在的ASP.NET页中使用的Silverlight控件内创建委托方法?

    例如,假设您正在创建一个Silverlight控件,该控件从用户(如名称、年龄等)获取信息,是否有方法从它所在的ASP.NET页绑定到Silverlight控件上的Click事件,然后从该Silverlight控件获取信息?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Bryant    15 年前

    可以按您的要求执行,但与ASP.NET没有太多关系。因为Silverlight在客户机上运行,所以您只需要在Silverlight中使用Click事件来更新HTML内容。然后,在进行回发时,可以将该数据发送回ASP.NET。

    除非你有充分的理由这样做,否则这可能不是最好的方法。您最好使用Web服务而不是通过ASP.NET将数据发送回Web服务器。

        2
  •  1
  •   Rubens Farias    15 年前

    我注册了一个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>
    

    和Silverlight代码隐藏:

    [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
    {
    }