關於頁面傳值,網上討論最多的是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數據庫自動填充了空白。
細節永遠很重要!