我有一个关于将会话变量传递到更新面板中的文本框(在Modal PopUp中显示)的问题。 这是我到目前为止的代码:
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 ......当用户点击一行中的链接时,该行的名称字段的值将保存为会话变量。然后显示模态弹出窗口。然后,Modal PopUp应显示保存为Session变量的Name。
代码排序有效。我遇到的是,当我单击一行时,Modal PopUp中的Label1.Text为空。因此,如果我关闭PopUp然后单击另一行中的另一个链接,则PopUp会显示之前单击的行的名称。
换句话说..如果第1行的名称为“Kevin”,第2行的名称为“Nathaniel”,我点击链接打开第1行的模态弹出,我希望PopUp显示“Kevin”。但事实并非如此。重建应用程序后第一次单击链接时,不显示任何内容。但是我说点击row1后点击第2行,然后Modal PopUp显示我之前点击的行的值,即“Kevin”,当我希望它是“Nathaniel”时。
我希望我没有混淆任何人。我是一个新手,我只是进入这个东西,所以如果有人可以帮助我,我会很感激,最好是代码示例等。
谢谢。非常感谢。
答案 0 :(得分:2)
“加载”事件(panel_Load
)在“点击”事件(LinkButton1_Click
)之前发生,因此它只能看到上一个值
快速解决方法是在“点击”事件中设置标签。除非为标签启用ViewState(ick!),否则标签可能也必须在“加载”中重新设置,具体取决于更新发生的时间/方式。
请参阅ASP.NET Page Life Cycle Overview和ASP.NET Application and Page Life Cycle: Page Events。
快乐的编码。