今天在想完善一下以前做的小的购物系统,在查看订单方面本来使用两个页面分别显示“订单”和“订单内容”这样管理员查看十分不方便。于是我构思了一下,在显示“订单”的GridView中添加一个HyperLink控件,通过点击HyperLink将订单号传给“订单内容”的控件中去,然后在下一个GridView中显示此订单中的相关内容
很快,在HyperLink的NavigateUrl属性中添加NavigateUrl='<%# Eval("ID", "~/OrderAdMin/Order.aspx?OrderID={0}") %>' 并在显示订单内容的数据源控件中设置好使用QueryString方法,数据源字段为“OrderID”,并将两者分别放在Web用户控件中,最后把两个用户控件放入一个ASPX页面中。
运行~却发现在报“无法找到OrderID”的错误,可是我没有点击Hyperlink,当然是没有的咯。因为以前做产品目录的时候使用过这样的传值方法,当时一点问题也没有,可是这里怎么会出错呢?
通过断点检测,我发现,做目录是传的值是int型的数值,在没有点击相关按钮时,默认值是“0”,而这次的OrderID使用字符、数值拼接起来的字符串,字符串的初始值是Null,当“0” 进入查询语句时由于没有匹配项,所以当然返回空,所以不会有问题,但是如果把Null传进去的话,SQL语句就会报没有数据源的错了。
为了避免出现这样的问题,于是我在包装底层方法的业务逻辑层的相关方法添加一个控制语句
if (orderid==null)
orderid = "";
这样,当第一次打开页面时如果为Null的话就会赋为“”,进去查询后无匹配就会返回空~