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……当用户单击一行中的链接时,该行的名称字段的值将保存为会话变量。然后显示一个模态弹出窗口。模态弹出窗口应该显示保存为会话变量的名称。

代码类型的作品。我遇到的是,当我单击一行时,模态弹出窗口中的 Label1.Text 为空。因此,如果我关闭 PopUp 然后单击另一行中的另一个链接,则 PopUp 然后显示先前单击的行的名称。

换句话说.. 如果第 1 行的名称为“Kevin”,第 2 行的名称为“Nathaniel”,我单击链接打开第 1 行的模态弹出窗口,我希望弹出窗口显示“Kevin”。但事实并非如此。重建应用程序后第一次单击链接时,没有显示任何内容。但是假设我在单击第 1 行后单击第 2 行,然后模态弹出窗口会显示我之前单击的行的值,即“Kevin”,而我希望它是“Nathaniel”。

我希望我没有混淆任何人。我是一个新手,我刚刚进入这个东西,所以如果有人可以帮助我,我会很感激,最好是代码示例等。

谢谢你。非常感激。

4

1 回答 1

2

“加载”事件 ( panel_Load) 发生“单击”事件 ( LinkButton1_Click) 之前,因此它只看到前一个值。

快速解决方法是在“点击”事件中设置标签。除非为标签启用 ViewState(ick!),否则标签可能还必须在“加载”中 [重新] 设置,具体取决于更新发生的时间/方式。

请参阅ASP.NET 页面生命周期概述ASP.NET 应用程序和页面生命周期:页面事件

快乐编码。

于 2012-05-09T20:07:10.270 回答