2

1つのプロパティと約6つのパブリックメソッドを持つクラスがあります(静的/共有されているものはありません)。

私のaspxページはClassプロパティをある値に設定しました。値が設定されるとすぐに、aspxPage内のクラスメソッドにアクセスできるようになりました。これで問題ありません。aspxページ内に3つのWebユーザーコントロールがあります。これらのWebユーザーコントロール内のいくつかのClassメソッドにアクセスする必要があります。これらの各ユーザーコントロール内にクラスの新しいインスタンスを作成したくありません。

たとえば、URLにはカテゴリコード25があり、25がクラスに渡されると、クラスにはブレッドクラム、SEO対応URLなどを作成するためのさまざまなメソッドがあります。 PageTitleなど

したがって、aspxページ内にクラスを1回設定し、Webユーザーコントロールにそのメンバーにアクセスさせるための最良の方法は何でしょうか。

4

3 に答える 3

2

Page_Initまたはメソッドでクラスをインスタンス化し、にPage_Load保存してSessionこの参照をで使用できるようにする必要がありViewStateます 。user controls

Session["myObj"]=new MyClass();

boundedオブジェクトを読み取り、

if(Session["myObj"]!=null){
 MyClass obj=Session["myObj"] as MyClass;
 if(obj!=null){

 }
}

または、パブリックプロパティ/メソッドを各ユーザーコントロールに追加します。

public MyClass Data {get;set;}
protected void Page_Load(object sender, EventArgs e)
{
 if(Data!=null)
  Label1.Text = Data.Foo;
}

ページイベントハンドラー(Page_Load)内からオブジェクト参照を割り当てます

MyClass obj=new MyClass();
UserControl1.Data=obj;
UserControl2.Data=obj;
于 2012-09-20T03:14:13.153 に答える
0

可能であれば、.ascxユーザーコントロールでクラスを処理するメソッドを記述し、そのメソッドを呼び出して、aspxページからメソッドにクラスを渡します。

クラスが実際にaspxページに設定される前に、コントロールが最初にレンダリングされるため、他の唯一のオプションは、他の回答が示すように、クラス変数をセッション、Cookie、または非表示フィールドとして保存することです。

aspxで、ユーザーコントロールの新しいインスタンスを作成します

   <asp:PaymentInformation ID="PaymentInformation1" runat="server" />

aspxコードビハインドで-ascxでTypeofEventを呼び出します

   PaymentInformation1.TypeofEvent(PassClass)
于 2012-09-20T03:15:40.960 に答える
0

webusercontrollで、以下をグローバルに宣言します

public int varriable1{ get; set; }

public int varriable2{ get; set; }

webusercontrollで、variable1とvariable2をそれぞれ変数1と2にアクセスします

int a=variable1;
int b=variable2;

yourpage.aspxで変数をwebusercontrollに渡します

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        PostComments_global1.varriable1= 6; //PostComments_global1 is your webuseruser controll id
        PostComments_global1.varriable2= 6;
    }
}
于 2012-11-10T07:38:42.273 に答える