在基类中使用aspx控件

时间:2009-05-20 08:49:33

标签: asp.net vb.net

我有两个非常相似的aspx页面,后面的代码中有各种相同的功能。我想创建一个基类,它可以从后面的代码派生出来。基类是否可以访问aspx页面上的控件。例如:

class base
    inherits System.Web.UI.Page
    Sub prepareScreen()
       'txtName is a text box on the aspx page
       Me.txtName.text = "George"
    end sub
end class

class codeBehind
     inherits base
     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
          prepareScreen()
     end sub
end class

有点可以理解,代码无法编译:

'txtName' is not a member of 'clsbase'

是否可以将两者联系在一起?

5 个答案:

答案 0 :(得分:2)

如果你重构你的代码会更好,所以你不需要做这样的事情。

如果您在基类中创建一个虚拟方法,您可以在子页面中覆盖该虚拟方法,并设置文本框的值,因为您可以轻松访问文本框

答案 1 :(得分:2)

您需要将控件声明为基类的属性。然后在ASP标记中,使用CodeFileBaseClass属性。

MSDN reference已不再可用。

class base
    inherits System.Web.UI.Page
    Protected Property txtName() As TextBox
    Sub prepareScreen()
       'txtName is a text box on the aspx page
       Me.txtName.text = "George"
    end sub
end class

class codeBehind
     inherits base
     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
          prepareScreen()
     end sub
end class

<%@ page CodeFileBaseClass="base" inherits="codebehind" ...  %>

答案 2 :(得分:0)

您可以使用FindControl,例如

TextBox txtName=FindControl("txtName");

即使它是由后代类呈现的,它也会在渲染页面上找到控件。虽然这在某种程度上突破了OO和功能/数据的分离。

答案 3 :(得分:0)

您可以使用((TextBox)Page.FindControl(“txtName”))来获取文本框。要小心,因为如果你使用控件可能不存在的其他基类

答案 4 :(得分:0)

回应你的澄清:

您可以创建一个属性:

protected TextBox txtName 
{
get{return (TextBox)Page.FindControl("txtName");} 
set{Page.FindControl("txtName") = vale;}
}

或创建虚拟财产:

protected virtual TextBox txtName{get;set;}

在这种情况下,你必须在主类

覆盖它
  protected override TextBox txtName{/*same as above*/}