ASP.net session存值问题

弟弟小王 2018-03-31 06:10:24
做ASP的页面跳转把值存入Session中遇到个奇怪的问题

这是要存的TextBox form 提交到test1show.aspx页面后

若是直接输入可以显示,但是使用Request.Form 就是从test1 提交过来的username无法显示,甚至不加""就无法存入session中
这是test1显示session中信息的代码,被这个问题搞死了。。。很是郁闷
...全文
446 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
弟弟小王 2018-04-01
  • 打赏
  • 举报
回复
谢谢,刚刚接触这个,学到了,问题已经解决,十分感谢!
  • 打赏
  • 举报
回复
另外,假设这个测试页面是你的 asp.net 网站应用的第一个启动页面,那么这样使用 Session 集合可能也是错误的! 对于 asp.net 来说,一开始不论如何刷新页面,其 cookie 中记录的 SessionID 每一次都是随机变动的。也就是说每一次回发时都会丢弃 Sesson 集合里边的内容——因为会话ID是随机变动的。直到你第一次往 Session集合里边些内容,这时候 asp.net 才会保持写到客户端 cookie 的 SessionID 不变,这时候才能保证会话不乱“跳”。 但是假设你第一次使用 Session集合,然后立刻重定向到其它页面,那么这个 SessionID 不会写到客户端浏览器的 Cookie 中(重定向机制造成的),那么其实跳转页面之后很有可能下一个画面、或者是画面刷新一下,Session 集合里边的内容就消失了。所以至少要提前往 Session 集合里边写一次数据。例如
public partial class testpage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            Session["aafasfdaf"] = 1;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        this.Session["username"] = this.username.Text;
        this.Server.Transfer("nextpage.aspx", true);
    }
}
这里,假设这个页面是整个网站的默认起始页面,当初次访问这个页面时先往 Session 集合随便写一个值,保证 asp.net 系统之后要稳定维持这个会话 SessionID,这样在 button 按钮的回发事件处理中再重定向到其它页面,才能确保在其它页面能取 Session["username"] 单元的值。
  • 打赏
  • 举报
回复
看你的代码,整个是自己想象的比较多,学习 asp.net 比较少。 asp.net 不是“提交到另外一个页面”。页面提交到自己,然后重定向。例如
public partial class testpage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        this.Session["username"] = this.username.Text;
        this.Response.Redirect("nextpage.aspx");
    }
}
或者
public partial class testpage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        this.Session["username"] = this.username.Text;
        this.Server.Transfer("nextpage.aspx", true);
    }
}
等等方式。 假设你要脱离开 asp.net 编程机制,那么你就应该知道 Request.Form[key] 这里的 key 并不保证是什么服务器 TextBox 控件的 ID,而是控件的 UniqueID 属性。理解这个机制,那么按照 asp.net 主流编程范式来写代码比较省力,这样用不着注意那么多坑。
弟弟小王 2018-03-31
  • 打赏
  • 举报
回复
可是问题就是这个页面是提交到另外一个页面
<form id="form1" runat="server" method="post" action="test1show.aspx"> 
另外一个页面使用Request.Form["username"]获取前面页面TextBox的值
  • 打赏
  • 举报
回复
正规的 asp.net 程序一定会写
username.Text
。这里的问题,在于那个教你写 Requst.Form[.....] 的人把你带到“沟里”了。对于非常简单、页面上除了一层最简单的几个控件就什么都没有的那种页面,你可以写 Request.Form["username"]。但是稍微复杂一点的页面——正规的页面——你应该写
username.Text
来读写这个文本控件的 Text属性值。这就好像一个业余拳击手还没有学好基本功就学习毫无防护和套路的街头肉搏,那么你学的拳击师傅肯定不是正轨训练出来的师傅。
  • 打赏
  • 举报
回复
Request.Form[key] 这里的 key 跟服务器端控件的 ID 并不保证是一样的。你应该使用
username.Text
来看获取提交的值,而使用
Request.Form["username"]
并不保证能读取到那个文本框,因为文本框输出的客户端 html element 的 name 属性值是不确定的,例如可能是 ctl0_ctl1_name 而不保证就是 name。

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧