ASP.Net:Programatic runat =“server”和onclick

时间:2009-12-24 18:08:10

标签: c# asp.net

我正在尝试编辑没有.ascx页面的控件,它完全在代码中完成。我试图添加一个可选的委托从ImageButton调用,以前在客户端完全处理。所以我想设置runat =“server”。但是,我没有看到此属性以编程方式显示在对象上!

3 个答案:

答案 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是一个自定义类,它继承了LinkBut​​ton并实现了一些自定义接口。