3

更新パネル(モーダルポップアップに表示される)のテキストボックスにセッション変数を渡すことについて質問があります。これは私がこれまでに持っているコードです:

ASPXコード:

        <asp:TemplateField HeaderText="Link">
            <ItemTemplate>
                <asp:LinkButton ID="LinkButton1" Text="Link" runat="server" OnClick="LinkButton1_Click"  />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:gridview>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="panel_Load">
    <ContentTemplate>
        <asp:Button ID="OKButton" runat="server" Text="Close" />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </ContentTemplate>
</asp:UpdatePanel>

<asp:ModalPopupExtender ID="mpe" runat="server" TargetControlID="ClientButton" PopupControlID="UpdatePanel1" OkControlID="OKButton">
</asp:ModalPopupExtender>

<asp:Button ID="ClientButton" runat="server" Text="Launch Modal Popup (Client)" style="display:none;" />

コードビハインド(C#):

protected void LinkButton1_Click(object sender, EventArgs e)
{
    GridViewRow clickedRow = ((LinkButton)sender).NamingContainer as GridViewRow;
    Label lbl_nme = (Label)clickedRow.FindControl("lbl_name");
    String string_nme = lbl_nme.Text.ToString();
    Session["Name"] = string_nme;
    mpe.Show();
}

protected void panel_Load(object sender, EventArgs e)
{
    Label1.Text = (string)(Session["Name"]);
}

つまり、基本的に、名前、アドレスなどのGridViewがあります。ユーザーが行のリンクをクリックすると、その行の名前フィールドの値がセッション変数として保存されます。次に、モーダルポップアップが表示されます。モーダルポップアップには、Session変数として保存された名前が表示されます。

コードのようなものです。私が経験しているのは、行をクリックすると、モーダルポップアップのLabel1.Textが空になることです。したがって、PopUpを閉じてから別の行の別のリンクをクリックすると、PopUpには前にクリックされた行の名前が表示されます。

つまり、行1の名前が「Kevin」で行2の名前が「Nathaniel」の場合、リンクをクリックして行1のモーダルポップアップを開くと、PopUpに「Kevin」と表示されるはずです。しかし、そうではありません。アプリケーションを再構築した後、初めてリンクをクリックすると、何も表示されません。ただし、行1をクリックした後に行2をクリックすると、モーダルポップアップに前にクリックした行の値が表示されます。つまり、「ナサニエル」であると予想される場合は「ケビン」です。

誰かを混乱させなかったといいのですが。私は初心者で、このようなことを始めたばかりなので、誰かが私を助けてくれるなら、できればコードの例などを教えていただければ幸いです。

ありがとうございました。とても有難い。

4

1 に答える 1

2

「Load」イベント( )は「Click」イベント( )のpanel_Loadに発生するため、の値のみが表示されます。LinkButton1_Click

手っ取り早い解決策は、「クリック」イベントでもラベルを設定することです。ラベルに対してViewStateが有効になっていない限り(ick!)、更新がいつ/どのように行われるかによっては、ラベル「ロード」で[再]設定する必要があります。

ASP.NETページライフサイクルの概要および ASP.NETアプリケーションとページライフサイクル:ページイベントを参照してください。

ハッピーコーディング。

于 2012-05-09T20:07:10.270 に答える