我有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.
}
}
答案 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";