0

Web ユーザー コントロールの page_load 関数によって入力されるOrderDefinition.ascxドロップダウン リスト ( ) を持つWeb ユーザー コントロール ( ) があります。ddl_CustomerCode

    public void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

            ddl_CustomerCode.DataSource = OrderDefinitionData.GetCustomers();
            ddl_CustomerCode.DataTextField = "CustomerCode";
            ddl_CustomerCode.DataValueField = "CustomerName";                
            ddl_CustomerCode.DataBind();
         }
    }

私のdefault.aspxページで、このWebユーザーコントロールを動的に追加します

    Control x = LoadControl("Controls/OrderDefinition.ascx");
    Panel1.Controls.Add(x);

default.aspx からこの Web ユーザー コントロールにパラメーターを渡したいのですが、使用するセッションまたはビューステートまたはキャッシュを使用するというアイデアを思いつきました。だから今、私のdefault.aspxは次のようになります

    Session["myParam"] = "customerNo1";
    Control x = LoadControl("Controls/OrderDefinition.ascx");
    Panel1.Controls.Add(x);

そして、私のPage_Loadは次のようになります

    public void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string myParam = Session["myParam"];
            ddl_CustomerCode.DataSource = OrderDefinitionData.GetCustomers(myParam);
            ddl_CustomerCode.DataTextField = "CustomerCode";
            ddl_CustomerCode.DataValueField = "CustomerName";                
            ddl_CustomerCode.DataBind();
         }
    }

問題は、上記のコーディング方法がよくわからないことです。このアーキテクチャを信頼する必要がありますか? これがパラメーターを Web ユーザー コントロールに渡す正しい方法であるかどうかを明確にしてください。

4

5 に答える 5

4

他の人が示唆しているように、ascxでこれを行うことができます:

    public string myParam { get; set; }
    public void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ddl_CustomerCode.DataSource = OrderDefinitionData.GetCustomers(myParam);
            ddl_CustomerCode.DataTextField = "CustomerCode";
            ddl_CustomerCode.DataValueField = "CustomerName";                
            ddl_CustomerCode.DataBind();
         }
    }

次に、ASPX でこれを行います。

WebControl1 x = (WebControl1)Page.LoadControl("Controls/OrderDefinition.ascx");
x.myParam = "customerNo1";
Panel1.Controls.Add(x);

LoadControl 関数を使用して Web コントロールをインスタンス化するときは、Web コントロールの TYPE にキャストすることに注意してください。プロパティとメソッドにアクセスできるように、このキャストを行うことが重要です。

于 2012-08-01T07:27:56.580 に答える
2

Webコントロールに次のようなパブリックプロパティを作成するだけです

private int myid=0;

public int MyID
{
    set { myid = value; }
}

次に、ユーザーコントロールのpageLoadに設定します。defaultpage.aspxでは、次のようなプロパティにアクセスできます。

myUserControl.MyId=32;
于 2012-08-01T08:12:34.623 に答える
2

ユーザーコントロールにプロパティを作成し、それを介して値を渡す必要があります。

于 2012-08-01T06:35:50.123 に答える
1

そのように使用Sessionすると、コントロールを適切にカプセル化することが非常に難しくなり、Sessionキーがコントロールに表示されないため (またはそのためにインテリセンスを介して)、使用するのが非常に直感的ではありません。ここで他の人が提案するように、コントロールでパラメーターを使用します。

于 2012-08-01T06:42:02.820 に答える
1

コントロールでパブリック メソッドを作成し、ページを介して簡単にアクセスできます。または、プロパティを設定することもできます。両方のオプションがあります。

于 2012-08-01T06:38:57.017 に答える