关于页面传值,网上讨论最多的是session、Request.QueryString、 ViewState等等之间的区别,并且这些区别也被大家熟记于心。但是编者今天偶然做web应用时,碰到问题如下:
系统框架采用orm关系映射,从A页面传varchar类型的值“StuNO”时,发现在B页面找不到对应的信息。
A页面代码如下 Response.Redirect("StuInfoDetail.aspx?StuNo="+DDL_Stu.SelectedValue);
B页面接收代码如下:
if (!IsPostBack)
{
try
{
StuNo = Request.QueryString["StuNo"].ToString();
}
catch
{
}
DDL_StuBind();
if (StuNo != "")
{
DDL_Stu.SelectedValue = StuNo ;
}
}
其中 DDL_Stu.SelectedValue = StuNo ;的赋值不成功,DDL_Stu.SelectedValue的值仍然为默认值,而不是StuNO的值,经检查发现StuNO='0002' ,DDL_Stu.SelectedValue='0001 ',也就是 Request.QueryString["StuNo"]会自动去掉StuNO中的前后空白部分,'0001 '传递后变为了'0001',,导致匹配不成功。
第二个问题,笔者有用的数据其实是'0001',但是数据库中存的却是'0001 ',检查发现,出现上述问题的原因是因为数据库StuNO类型为char(8),对于不存在数据的部分,sql server数据库自动填充了空白。
细节永远很重要!