好奇如何做到這一點。有什麼辦法可以在控件所在的Asp.net頁面中使用的Silverlight控件中創建委託方法?是否可以通過可以在asp.net頁面中使用的Silverlight控件啓動事件?
例如,假設您正在創建一個從用戶(即名稱,年齡等)請求信息的Silverlight控件,是否有辦法以某種方式綁定到來自asp的Silverlight控件上的單擊事件。它正在坐的網頁,然後從該Silverlight控件獲取信息?
好奇如何做到這一點。有什麼辦法可以在控件所在的Asp.net頁面中使用的Silverlight控件中創建委託方法?是否可以通過可以在asp.net頁面中使用的Silverlight控件啓動事件?
例如,假設您正在創建一個從用戶(即名稱,年齡等)請求信息的Silverlight控件,是否有辦法以某種方式綁定到來自asp的Silverlight控件上的單擊事件。它正在坐的網頁,然後從該Silverlight控件獲取信息?
可以做你想問的事情,但它與ASP.Net沒有多大關係。由於Silverlight在客戶端上運行,因此您只需在Silverlight中單擊事件即可更新html內容。您可以在回發時將該數據發送回ASP.Net。
除非你有充分的理由這樣做,否則它可能不是最好的方法。您可能會更好地使用Web服務將數據發送回網絡服務器,而不是通過ASP.Net。
我做了註冊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
{
}
非常酷,我要試試這個。 – 2009-11-05 01:08:05
好點(縣)。我只是想,如果我的控件將來可以通過它所在的頁面「可重用」,但現在我想到了,觸發asp.net頁面上的某些內容的唯一方法是HTML更新或Javascript觸發。 最好讓控件作爲一個獨立的應用程序。 – 2009-11-05 01:06:51