【发布时间】:2012-03-27 08:42:02
【问题描述】:
我有一个自定义的 Asp.net 控件
public class ImageControl : Panel
{
private RadAsyncUpload AsyncUpload;
}
页面上的多个 ImageControls 应该使用 JS 对象的本地实例,所以我将它们包装在对象中(闭包):
JS>
Type.registerNamespace("MyControls.ImageControl");
MyControls.ImageControl = function () {
this._filesUploaded = 0;
this._maxFileCount = 1;
};
MyControls.ImageControl.prototype = {
inc_filesUploaded: function () {
this._filesUploaded++;
},
FileSelected: function (sender, args) {
inc_filesUploaded();
}
};
MyControls.ImageControl.registerClass('MyControls.ImageControl');
ASP.NET>
protected override void Render(HtmlTextWriter writer)
{
Page.ClientScript.RegisterClientScriptResource(_TYPE, JS.ImageControl);
writer.Write(@"
<script type=""text/javascript"" id=""" + ClientID + @"ScriptHost"">
(function( ) {
var onLoad = function( ) {
window." + ID + @" = new MyControls.ImageControl();
};
if (window.addEventListener) {
window.addEventListener('load', onLoad, false);
}
else if (window.attachEvent) {
window.attachEvent('onload', onLoad);
}
})( );
</script>
");
base.Render(writer);
}
www.asp.net/AJAX/Documentation/Live/tutorials/CreatingCustomClientControlsTutorial.aspx
stackoverflow.com/questions/6309947/javascript-closure-advantages
http://www.codeproject.com/Articles/55414/From-Simple-JavaScript-Classes-to-ASP-NET-AJAX-Con
http://www.netfxharmonics.com/2008/11/Creating-JavaScript-Components-and-ASPNET-Controls
?: 我得到错误 MyControls.ImageControl 不是构造函数 ?: 是否可以将这些“打包”函数分配为事件处理程序
AsyncUpload.OnClientFileSelected = "FileSelected";
在“AJAX 服务器控件项目”中,自定义类从 ScriptControl 继承,我还可以使用高级包装“面板”吗?
任何建议将不胜感激。
【问题讨论】:
-
好的。第一步是正确添加 IScriptControl 接口,如下所示:vincexu.blogspot.com/2010/02/… 现在 JS 部分正在加载,但我仍然需要弄清楚如何将处理程序添加到 AsyncUpload
-
第二步是将变量传递给 JS> this.idx = null; this.AsyncUpload = null;并在代码隐藏中设置它们.. descriptor.AddProperty("idx", this.ClientID); descriptor.AddProperty("AsyncUpload", this.AsyncUpload.ClientID);
标签: c# javascript asp.net controls closures