2012-04-16 10 views
4

たとえば、現在のユーザーのフルネームへのアクセスが必要なASCXユーザーコントロールがあるとします。 ASPXページがトップASP.NET ASCXインスタンス変数の使用

体内の
<%@ Register src="top.ascx" tagprefix="custom" tagname="top" %> 

と、この行に次の行が含まれています

<custom:top runat="server" /> 

ASPXファイルには、現在のユーザーのユーザーIDを知っているし、彼のフルネームを決定することができます。では、ASCXファイルに情報を提供するためにASPXファイルによって実行されるコードをどのように使用できますか?

答えて

4

ユーザーコントロールのPage propertyを使用してページのインスタンスにキャストできます。次に、ページクラスのメソッドを呼び出してユーザー名を取得します。

動的にコンパイルされたプロジェクトでこれを機能させるには、コントロールが動的にコンパイルされたページのデータ型を認識できるようにする必要があります。 Here is a short tutorial on how to do

または、Brandon outlinesとして、逆の操作を行い、ページにユーザーに情報を制御させるようにします。

+1

あなたの最初の段落での答えが私のために最高の働きました。私はすでにこれを試したと思った。 Brandonのソリューションは、実際には涼しいものの、より多くの作業を必要としていたのに対し、素晴らしい結果を出して実装するのは簡単でした。ありがとう! – user1325179

6

UserControlでプロパティを宣言し、親ページを設定します。ユーザーコントロールで

:あなたは誤解されるかもしれないようにaspxページで

public string FullName { get; set; } 

いずれか

YourUserControl.FullName = FullName 

の後ろやマークアップを通じてコードでそれを設定するには、

<custom:top runat="server" FullName="<%= SomeProperty %>" /> 
+1

このアイデアをありがとう、Brandon!これは間違いなく有用であるといえます。 – user1325179

0

これが聞こえますページのライフサイクルがどのように機能し、どのようにコントロール全体にデータを公開するかについて説明します。あなたのASPXファイルで

public override void OnLoad(EventArgs e) 
    { 
     string userName = "Bob"; 
    } 

、あなたがコントロールを参照して沿ってデータを渡すために、その上にプロパティを設定することができます:たとえば、あなたがあなたのASPXでこのコードを持って言うことができます

<custom:top ID="someControl" runat="server" /> 

あなたはそのようなあなたのtopコントロールでプロパティを公開:

public string UserName { get; set; } 

あなたは、あなたのOnLoadメソッドにこのコードを追加することができます。

someControl.UserName = userName; 

コントロールでは、そのデータにアクセスできます。

HttpContext.Current.Items["key"] = userName; 

をし、同じやり方を経由して、あなたのコントロールからデータを取得:別の方法として、あなたがコントロールへの直接のラインを持っていけない場合は、要求キャッシュで物事を固執することができます

string fromCache = HttpContext.Current.Items["key"]; 
0

あなたは可能性がありいくつかの点でこれについて説明してください。ユーザーはセッションにバインドされるので、私は通常、セッション変数を使用します。ASPX(または時にユーザーがログインする)で

:ASMXで

Session["UserFullName"] = GetFullName(); //Code to get full name here 

this.FullName = Session["UserFullName"]; //TODO: Check for null values 
関連する問題