问题描述
有两个页面,分别为A.aspx和B.aspx在A页面中添加一个Dropdownlist1和Button1控件,通过点击Button1,将Dropdownlist1选择后的值赋给一个Session变量,并跳转页面到B.aspxstringtable=DropDownList1.SelectedValue;Session["Table"]=table;Response.Redirect("B.aspx");
在B页面中接收Session,并将其作为SQLserver的SELECT语句中的一个值if(!IsPostBack){selecttable=Session["Table"].ToString();//stringselecttable在后台页面最开头已定义bind();}publicvoidbind(){stringsqlstr="SELECT*FROM["+selecttable+"]WHEREshipID=1;//其余省略}
这样,当点击A页面的按钮就能跳转到B页面,并在GridView中显示所选择的那张表,但问题是当要在B页面对这个表进行编辑时protectedvoidGridView1_RowEditing(objectsender,GridViewEditEventArgse){GridView1.EditIndex=e.NewEditIndex;bind();}
就弹出如下错误:缺少对象或列名,或者对象或列名为空。对于SELECTINTO语句,请确保每列均具有名称。对于其他语句,请查找空的别名。不允许使用定义为""或[]的别名。请添加名称或单个空格作为别名。这是怎么回事呢?望高手解答!!
解决方案
解决方案二:
stringsqlstr="SELECT*FROM["+Session["Table"].ToString()+"]WHEREshipID=1;上面是方法一下面是方法二selecttable=Session["Table"].ToString();//stringselecttable在后台页面最开头已定义if(!IsPostBack){bind();}
解决方案三:
嗯,这样就对了!!谢谢ETstudio!我对if(!IsPostBack)认识的还不够深入!是不是放在里面的值只是暂时的呢?还有个问题想请教一下,书上都说Session比较占内存,不用时要记得释放,我就想用Session.Abandon();但这句话该放在哪里好呢?我试过放在selecttable=Session["Table"].ToString()后,但出现“未将对象引用设置到对象的实例”的错误。
解决方案四:
没有人能回答吗??Session.Abandon();应该放在什么地方啊?或者用别的语句吗?
解决方案五:
顶起来!!
解决方案六:
Session.Remove("KeyName");
解决方案七:
不行,仍然会出现“未将对象引用设置到对象的实例”的错误。
解决方案八:
session传值很容易丢失的,为什么不用URL传
解决方案九:
书上都说Session比较占内存,不用时要记得释放,---------------------------------------------------用户关闭浏览器时,session就自动释放了。