按钮点击
2.页面加载
protected void lnkotel1_Click(object sender, EventArgs e)
{
Session["xd"] = lblotelid1.Text;
Server.Transfer("~/otelsayfa.aspx");
Response.Redirect("otelsayfa.aspx?id=" + lblotelid1.Text);
}
protected void Page_Load(object sender, EventArgs e)
{
lblotelid.Text = Session["xd"].ToString();
var last = PreviousPage;
if (last != null)
{
lblotelid.Text = ((TextBox)last.FindControl("TextBox1")).Text;
}
else
{
lblotelid.Text = "no";
}
if (Request.QueryString.Get("id") == null)
{
lblotelid.Text = "no";
}
else
{
lblotelid.Text = Request.QueryString["id"].ToString();
}
我尝试了3种不同的变体,但都失败了。以下是我逐一运行这些代码后发生的事件:
第一个代码:我收到一条错误消息,上面写着:System.Web.SessionState.HttpSessionStatethis[string].get,null
第二个代码:空白页
第三代码:";否";(由于其他条件(。若我删除else条件,我会得到和第一个代码相同的错误消息。
我几天来一直在努力解决这个问题。我找不到任何瑕疵。我非常感谢现在的任何帮助。
edit:我可以将数据从.master页面传输到任何.aspx页面,没有任何问题。但从.aspx页面到艰难的.aspx页面,这是不可能的。没有办法。
我相信这个关于SO的答案最适合。
通过在按钮上设置PostBackUrl,来自当前页面的数据将作为请求集合的一部分发送到下一个页面。
<asp:LinkButton id="lnkotel1" Text="Click Me!" runat="server" PostBackUrl="page2.aspx"/>
为了测试跨页回发,MSDN链接给出了以下示例(我将其更改为C#(:
if(PreviousPage != null)
{
if(PreviousPage.IsCrossPagePostBack == true){
//Cross-page post
}
else
{
//Not a cross-page post
}
}
然后访问原始文本框的值,如下所示:
((TextBox)PreviousPage.FindControl("lblotelid1")).Text
我使用了Listview/Formview,它成功了。
对于通过会话发送数据,您应该在第一页中执行以下操作:
Asp形式:
<asp:Button ID="lblotelid1" runat="server" OnClick="lblotelid1_Click" Text="Yes" />
代码背后:
protected void lblotelid1_Click(object sender, EventArgs e)
{
Session["xd"] = lblotelid1.Text;
Response.Redirect("~/otelsayfa.aspx");
}
在第二页
Asp形式:
<asp:Label ID="lblotelid" runat="server"></asp:Label>
代码背后:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["xd"] != null)
lblotelid.Text = Session["xd"].ToString();
else
lblotelid.Text = "No";
}
无论您在第一页中为会话["xd"]分配什么,都将分配给第二页中lblotelid标签的文本。