2

メインの.aspxページには、2種類のユーザーコントロールを動的に登録するプレースホルダーがあります。

case "1":
   var control = (ControlType)LoadControl("~/PathToControl.ascx");
   control.Property = value;
   control.Initialize();
   placeholder.controls.add(control);
break;
case "2":
   var control1 = (ControlType)LoadControl("~/PathToControl1.ascx");
   control1.Property = value;
   control1.Initialize();
   placeholder.controls.add(control1);
break;

各コントロールにはいくつかのユーザーコントロールがあります。

ここで、メインページに送信ボタンがあり、上記のカスタムコントロールから各ユーザーコントロールの値を取得したいと思います。プレースホルダーのコントロールを取得しようとしましたが、ポストバック後のプレースホルダーが空です。

if(placeholder.Controls.count>0){
  var userControl = ((UserControlType)placeholder.Controls[0]);
  var controlName = userControl.FindControl("ControlName") as TextBox;
}

page_initでカスタムコントロールを作成しようとしましたが、それでもユーザーコントロールを取得できません。

誰かが私がこれを達成する方法を知っていますか?

解決

動的ユーザーコントロールは、訪問のたびにInitEventで設定する必要があります。

詳細については、http://msdn.microsoft.com/en-us/library/ms972976.aspx#viewstate_topic4を参照してください。

4

2 に答える 2

3

ユーザーが送信ボタンをクリックするので、値はフォームとともに投稿されます。値を取得する最も簡単な方法は次のとおりです。

  1. 動的コントロールを作成するときは、次のようにIDプロパティを設定します。

    control1.ID = "control1";

  2. ポストバックで、フォームから値を取得します。

    var control1Value = Request.Form["control1"];

于 2012-05-24T16:27:51.287 に答える
1

コントロールはInitイベントに登録する必要があります

protected override void OnInit(EventArgs e) {
   case "1":
        var control = (ControlType)LoadControl("~/PathToControl.ascx");
        control.ID = "controlID";
        placeholder.controls.add(control);
  break;
  case "2":
      var control1 = (ControlType)LoadControl("~/PathToControl1.ascx");
      control.ID = "controlID_1";
      placeholder.controls.add(control1);
   break;
base.OnInit(e);
}

Initの後に必要なプロパティを設定します

case "1":
  var control = (ControlType)placeholder.findControl("ControlID");
  control.Property = value;
 control.Initialize();
break;
case "2":
 var control1 = (ControlType)placeholder.findControl("ControlID_1");
 control1.Property = value;
 control1.Initialize();
break;

ページのポストバック後

void LoadControls(){
   case "1":
    var control = (ControlType)placeholder.findControl("ControlID");
    var txtControl =  control.FindControl("controlName") as TextBox;
   break;
   case "2":
    var control1 = (ControlType)placeholder.findControl("ControlID_1");
    var txtControl_1 =  control1.FindControl("controlName") as TextBox;
   break;
 }
于 2012-05-25T08:15:57.470 に答える