好奇如何做到这一点。有没有办法在Silverlight控件中创建一个委托方法,可以在控件所在的Asp.net页面中使用?
例如,假设您正在创建一个向用户请求信息的Silverlight控件(即名称,年龄等),是否有办法以某种方式从asp.net绑定到Silverlight控件上的click事件它坐在哪个页面,然后从Silverlight控件获取信息?
答案 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
{
}