0

この問題に対していくつかの解決策を試しましたが、どれもうまくいきませんでした。基本的に、従業員のテーブルがあり、ユーザーは更新パネルを介して従業員を動的に追加することを選択できます。各従業員は LinkBut​​ton として追加されこのボタンはOnClickイベントを通じてajaxToolkit:modalpopupextenderウィンドウを起動し、このウィンドウには従業員の詳細が表示されます。問題は、従業員名をクリックすると、ポップアップ ウィンドウが表示されますが詳細が表示されないことです。

ボタンを作成してテーブルに配置するコードは次のとおりです。

LinkButton lbtn = new LinkButton();
                    lbtn.ID = employee_arry[i] + "_lbtn" + i;
                    lbtn.Text = employee_arry[i];
                    lbtn.Click += new EventHandler(this.employee_info);
                    lbtn.CausesValidation = false;
                    lbtn.Attributes.Add("runat", "server");
                    cell.Controls.Add(lbtn);

そしてここに employee_info メソッドがあります:

//the info will be pulled from the database…
public void employee_info(object sender, EventArgs e)
    { 
        name.Text = "employee name";
        dept.Text = "employee department";
        jobt.Text = "employee job title";
        email.Text = "employee email";
        tel.Text = "employee telephone";
        ModalPopupExtender1.Show();
    }
4

1 に答える 1

2

この答えを確認してください

https://stackoverflow.com/a/11127064/1268570

これは、動的制御の動作を説明しています

あなたは考慮する必要があります:

  • マスターページを使用していない場合は、PreInitイベントで動的コントロールを作成する必要があります。マスターページを使用している場合は、Initイベントでコントロールを作成します。
  • ビューステートが適用されると(postイベントで)プロパティが上書きされるため、これらのイベントで各postで変更できるプロパティを設定することは避けてください。
  • ページが投稿されるたびに動的コントロールを作成する必要があります。これは避けてくださいif(!this.IsPostBack)this.CreatemyDynamicControls();
  • PreInitイベントまたはInitイベントでコントロールを作成すると、それらの状態はpostイベントで自動的に設定されます。つまり、LoadCompleteイベントでは、各投稿でコントロールを再度作成した場合でも、作成した場合でも、コントロールに状態が含まれます。明示的に状態を設定しません。設計時に作成されたコントロールを処理する場合、この動作は異なることに注意してください。その場合、状態が設定されているイベントはLoadイベントです。
  • イベントサブスクリプションは、PageLoadCompleteの前に発生する必要があります。そうしないと、発生しません。

編集1

解決策が見つからない場合は、これがその方法です(完全に機能する例)。

ASPX

    <asp:ScriptManager runat="server" />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" ViewStateMode="Enabled">
        <ContentTemplate>
            <asp:Panel runat="server" ID="myPanel">
            </asp:Panel><br />
            <asp:Button ID="Button1" Text="add control" runat="server" OnClick="addControl_Click" /><br />
            <asp:Label ID="lblMessage" runat="server" />
        </ContentTemplate>
    </asp:UpdatePanel>

コードビハインド

    protected int NumberOfControls
    {
        get
        {
            if (ViewState["c"] == null)
            {
                return 0;
            }

            return int.Parse(ViewState["c"].ToString());
        }
        set
        {
            ViewState["c"] = value;
        }
    }

    protected void addControl_Click(object sender, EventArgs e)
    {
        this.NumberOfControls++;
        this.myPanel.Controls.Add(new Literal { Text = "<br />" });
        this.myPanel.Controls.Add(this.CreateLinkButton(this.NumberOfControls));
    }

    protected void Page_PreLoad(object sender, EventArgs e)
    {
        this.CreateDynamicLinkButtons();
    }

    private void CreateDynamicLinkButtons()
    {
        for (int i = 0; i < this.NumberOfControls; i++)
        {
            this.myPanel.Controls.Add(new Literal { Text = "<br />" });
            this.myPanel.Controls.Add(this.CreateLinkButton(i + 1));
        }
    }

    private LinkButton CreateLinkButton(int index)
    {
        var l = new LinkButton { Text = "MyLink" + index.ToString(), ID = "myLinkID" + index.ToString() };
        l.Click += (x, y) =>
        {
            this.lblMessage.Text += "<br/>ID: " + (x as LinkButton).ID;
        };

        return l;
    }

出力

ここに画像の説明を入力してください

于 2012-06-23T07:38:14.480 に答える