0

asp.net で簡単な質問があります。ユーザー コントロール内のコントロールから直接データを取得できるかどうかを知りたいです。セッション変数、Viewstateを使わずにやりたい...

編集: UC でパブリック変数を宣言する方法を使用するようになりました。

親ページの Page_load の一部を次に示します。

 this.plan_action = (UCPlan)Page.LoadControl("~/Association/UCPlan.ascx");
 PlaceHolder1.Controls.Add(this.plan_action);

 if (this.plan_action.Validate == true)
        {
            CheckBox1.Checked = true;
            //String référence = Session["liste_action"].ToString();

            for (int i = 0; i < this.plan_action.List1.Count; i++)
            {
                Label8.Text += this.plan_action.List1[i].Référence + "/";
                //Label8.Text += "/";
            }


        }

しかし、私の変数validateはfalseのままです。

これは、宣言で検証変数の値を変更するコードです。

    private bool validate;

    public bool Validate
    {
        get { return validate; }
        set { validate = value; }
    }


 protected void Button2_Click(object sender, EventArgs e)
      {


          //myCommand.Connection = myConnection;
          //Session["liste_action"] = this.List;
          this.Validate = true;
          //Response.Redirect("../Risques_folder/AjouterRisque.aspx");


      }

ご協力ありがとうございました、

クエンティン

4

2 に答える 2

1

新しい情報のためUPDATE

ASP.NET での一連のイベントについて学習する必要があります。

ページのは、UserControlのハンドラーLoadよりもずっと前に発生するため、プロパティは常に に設定されます。ClickButton2Validatefalse

あなたには2つの明らかなオプションがあります(私が見ているように)...

の作成を に保存UserControlしますPage_Load(または、できれば に移動しますPage_Init。これは、通常、これが最も適切な場所だからです)。Validate次に、プロパティの小切手を に入れますPage_PreRender

または、Button2 のクリック時にそのイベントを作成し、ページでイベントを処理しますEventUserControlRaise


別の更新

上記の 2 つのオプションのうちの 2 番目については、UserControlクラスに次のものがあります...

public delegate void ButtonClickedDelegate(object sender, EventArgs e);
public event ButtonClickedDelegate ButtonClicked;

(設定した後の) 呼び出しのButton2_Click方法では...UserControlthis.Validate = true;

ButtonClickedDelegate(sender, e);

Page_InitPage、次のようなものを入れます...

ctrl1.ButtonClicked += new UCPlan.ButtonClickedDelegate(ctrl1_ButtonClicked);

そして、次のような新しいメソッドを用意します

void ctrl1_ButtonClicked(object sender, EventArgs e)
{
    if (ctrl1.Validate)
    {
        ...
    }
}

を制御するdelegateと、クラス全体を含め、必要な情報を渡すことができることに注意してください。したがって、Validateプロパティを呼び出す代わりに、必要なクラスの新しいインスタンスを作成し、それをデリゲート パラメーターとして渡します。

デリゲートイベントの詳細については、MSDN を参照してください。



元の答え

何かを見逃していない限り、これは非常に単純な ASP.NET の概念です...

プロパティやメソッドを作成できます。

例えば物件として…

public string MyProperty
{
  get { return "My Property Value"; }
}

あるいは方法として

public string MyMethod()
{
   return "My Method Value";
}

UserControlPageとそれを含むASP.NET の間で値を渡すことについて話している場合はPage、 でプロパティまたはメソッドを呼び出すだけです。コントロールが呼び出された場合 (たとえば) myCtrl、次のようなことができます...

string prop = myCtrl.MyProperty;
string meth = myCtrl.MyMethod();

(AHMED EL-HAROUNY からの素晴らしいコメントの裏側)
クライアント側のページに値を渡すことについて話している場合は、同じプロパティ/メソッドを HTML マークアップで直接使用できます。protectedただし、この場合、プロパティ/メソッドは、ではなくとして宣言できます。public

たとえば、値を表示するには...

<%=MyProperty%>

または

<%=MyMethod()%>

または、JavaScript で値を使用する場合は、次のように...

var myProp = "<%=MyProperty%>";
于 2012-07-04T10:05:36.117 に答える
1

はい、可能ですが、 UserControl のコントロールをPublicとして公開します。

于 2012-07-04T09:51:08.263 に答える