我正在尝试编辑没有.ascx页面的控件,它完全在代码中完成。我试图添加一个可选的委托从ImageButton调用,以前在客户端完全处理。所以我想设置runat =“server”。但是,我没有看到此属性以编程方式显示在对象上!
答案 0 :(得分:3)
如果您是在代码中创建它,则隐式runat="server"
,无需指定。
答案 1 :(得分:1)
服务器控件自动在服务器上运行,因此我假设您希望将所有内容整合在一起。
如果您能够修改控件,则可以添加一个行为类似普通事件但调用委托的事件。对不起,我不熟悉确切的C#语法,所以我将展示VB。在控件中:
Public ParentDelegateEvent As System.Delegate
Public Sub btnDelegateClick(ByVal sender As Object, ByVal e As EventArgs) Handles btnDelegate.Click
Dim args(1) As Object
args(0) = sender
args(1) = e
ParentDelegateEvent.DynamicInvoke(args)
End Sub
然后在具有此控件的页面中,在PageLoad事件中设置委托:
Dim delMyEvent As New DelegatePostBack(AddressOf MyPageEventHandler)
MyControl.ParentDelegateEvent = delMyEvent
MyPageEventHandler在页面上的定义与其他内容一样:
Private Sub MyPageEventHandler(ByVal sender As Object, ByVal e As EventArgs)
End Sub
答案 2 :(得分:0)
也许这会有所帮助。我有一个自定义控件(所有代码,就像你的那样)我做这样的事情来添加点击:
myLinkCtrl = new myLinkControlClass();
myLinkCtrl.Click += myEventName;
myLink.PostBackUrl = myTargetURL;
myLink.Attributes.Add([add some attributes here like target, etc.]);
etc..
myLinkControlClass是一个自定义类,它继承了LinkButton并实现了一些自定义接口。