2012-03-07 18 views
0

私はかなり.NETの新機能を持っていて、単純なasp.netアプリケーションで小さな問題に遭遇していて、.ascxファイルで定義されたコントロールにアクセスしていますコードの背後にある。ここでAsp.netのコードはascxのコントロールにアクセスできない

は私のDefault.ascxファイルです:ここで

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" 
    CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 
</asp:Content> 
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 
    <p> 
     <asp:Label AssociatedControlID = "userText" AccessKey = "L" runat="server"      ID="userLabel">Username</asp:Label> 
     <asp:TextBox ID = "userText" runat="server" MaxLength="20" ></asp:TextBox> 
    </p> 
</asp:Content> 

Default.aspx.csファイルです:あなたが前方にかなりまっすぐに、見ることができるように

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void Page_PreInit(object sender, EventArgs e) 
    { 
     userLabel.Text = "Hello!"; 
    } 

} 

、私がしようとしているすべてのプログラムでラベルのテキストプロパティを変更することです。しかし、これを実行するとNullReferenceExceptionが発生し、userLabelはオブジェクトのインスタンスに設定されません。 userLabelを_Defaultクラスのプロパティにするべきではありませんか?明示的にプロパティとしてuserLabelを設定しようとしましたが、userLabelにすでに定義があるというコンパイル時エラーが発生します。

私はここで非常に簡単なものを見逃していると思うが、私はそれが何であるか分からない。誰かが私が間違っていることを教えてもらえますか?どうもありがとう!

答えて

2

Page_PreInitは、コントロールが描画される前に呼び出されます。 Page_Loadメソッドにコードを追加してみてください。

を参照してくださいライフサイクルイベントセクションhttp://msdn.microsoft.com/en-us/library/ms178472.aspx

1

コントロールは初期化されるまで利用できません。コントロールがまだPreInitイベントで作成されていないため、アクセスできません。

あなたが行っているような設定値は、通常Loadイベントで、または少なくともページInitイベントが発生した後に実行する必要があります。

0

に私はuserLabelという名前のラベルが表示されません。あなたのラベルの名前はuserTextのように見えます。

+1

右にスクロールします。それはそこにあります。 :) – Khan

1

hereを読むことができるので、page_perinitには存在しないためコントロールにアクセスできません。

は、コントロールのコントロールの状態にアクセスできません

1

初期化Page_Init上で行われる必要があり、良い習慣は、このイベント中にテーマとパーソナライゼーションを適用しています。

protected void Page_Init(object sender, EventArgs e) 
{ 
    userLabel.Text = "Hello!"; 
} 
1

まず、ユーザコントロールのラベルには、userLabel.Textでアクセスできません。あなたは親ページにLabel lbl = (Label)UserControlID.FindControl("userLabel");と一緒に行く必要があります。 (しかし、あなたに必要なのは親ページからユーザーコントロール内のラベルのセット谷にある。)

は、だから私はどうなるのように:ユーザーコントロールで

入れプロパティ:

public string UserName {get; set;} 
protected void Page_Load(object sender, EventArgs e) 
{ 
    userLabel.Text = this.UserName; 
} 

ページのLoadイベントで親ページ、設定されたプロパティ値の:

protected void Page_Load(object sender, EventArgs e) 
{ 
    UserControlID.UserName = "Hello!"; 
} 

親ページのPage_Loadのは、UserControlのページのロードの前に呼び出しますし、それは大丈夫でなければなりません。

関連する問題