Asp.Net,从继承页面类获取对象?

时间:2012-06-08 21:25:50

标签: asp.net inheritance master-pages

我有baslik.aspx页面,它使用一个masterpage.I创建一个与同一个libruary的Worker.cs文件,我想从Worker.cs访问baslik.aspx文字对象。它说空对象referance!

我的baslik.aspx:

<%@ Page Async="true" EnableEventValidation="true" Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Baslik.aspx.cs" Inherits="F8.Imza.Baslik" %>

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
..
..
<asp:Literal runat="server" id="myBaslikLiteral">
..
</asp:Content>

baslik.aspx.cs:

namespace F8.Imza
{
    public partial class Baslik : System.Web.UI.Page
    {
      ...
      ...
      ...
    } 
}

我想从Worker.cs访问页面上的任何对象(正在运行):所以我试试......:

public partial class Worker : Baslik
{
   public void ActionStart()
    { 
       this.myBaslikLiteral.Text = "Bla bla bla";
       //i can see my literal name but it is null.
    }
}

3 个答案:

答案 0 :(得分:2)

.Net 1.1天的事情变得简单了;作为this回答提及,控件曾经在一个定义良好的地方创建,其方式类似于在InitializeComponent中实例化Windows窗体控件的方式。

.Net 2.0时代改变了这一切;不再需要拥有所有这些锅炉板代码 - 相反,框架将根据page.designer中声明的控件在第一次运行时(或在网站预编译之前)生成所有必要的连线。 cs文件。

不幸的是,当您从标准ASPX页面继承时,只会自动创建childs child.designer.cs文件中声明的控件;父控件上的父属性是可用的,它们永远不会自动初始化(因为链接的答案建议,看看生成的代码是非常有启发性的)。

相反,人们将其基页封装在一个独立的类中是很常见的;此类以编程方式构建必要的控件,例如,在基类中的CreateControlsMethod或类似控件中,在page lifecycle中早期调用(如Page_Init)。但是,还要注意有多少人只是将常用页面功能放在BasePage中(参见here的典型示例),因为创建整个基本控件树非常繁琐,并且难以更改布局(几乎不可维护,因为您必须有效在后面的代码中创建整个页面。

但是,在页面中封装功能区域的简单方法(如常用表单字段)只是创建UserControls

答案 1 :(得分:0)

我不完全确定我是否理解这个问题,但是如果你尝试的话会怎么样:

this.FindControl("myBaslikLiteral").Text = "Bla bla bla";

如果这不起作用,您可能必须枚举页面上的控件然后找到子控件。

答案 2 :(得分:0)

我认为myBaslikLiteral是设计师从Baslik.aspx生成的私有字段。

一种方法是通过Baslik.cs中的受保护或公共财产公开此文件:

public Literal myPublicBaslikLiteral { get { return myBaslikLiteral; } }

然后在Worker.cs中,您可以使用以下属性:

this.myPublicBaslikLiteral.Text = "Bla bla bla";