是否可以从可以在asp.net页面中使用的Silverlight控件启动事件?

时间:2009-11-05 00:40:57

标签: asp.net silverlight

好奇如何做到这一点。有没有办法在Silverlight控件中创建一个委托方法,可以在控件所在的Asp.net页面中使用?

例如,假设您正在创建一个向用户请求信息的Silverlight控件(即名称,年龄等),是否有办法以某种方式从asp.net绑定到Silverlight控件上的click事件它坐在哪个页面,然后从Silverlight控件获取信息?

2 个答案:

答案 0 :(得分:1)

可以按照你的要求做,但与ASP.Net没什么关系。由于Silverlight在客户端上运行,因此您只需在Silverlight中单击事件即可更新html内容。然后,当您进行回发时,您可以将该数据发送回ASP.Net。

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

答案 1 :(得分: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>

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