项目错误列表之二

    我遇到这样一个需求,在页面A上点一个链接,新开一个页面B,它包含一个列表(DataGrid),选择其中一条,关闭当前页面,回到前一个页面,并将我选择的信息带过去。实现很简单,但是我碰到一个让我郁闷了好久的小问题:
    B页面的“选择”的模板列上,我是这样写的:


<ItemTemplate>
    
<asp:HyperLink id="Hyperlink1" runat="server" Text="选择" 
        NavigateUrl
="<%#"javascript:opener.document.Form1.ManagerName.value='"
        
+ DataBinder.Eval(Container, "DataItem.username")+"' ;
        opener.document.Form1.ManagerId.value
='"+ DataBinder.Eval(Container, "DataItem.usercode")+"';
        window.close();"%
>">选择
    
</asp:HyperLink>
</ItemTemplate>

上面的代码的目的是将UserName和UserCode分别传递给前一个页面的ManagerName和ManagerId。
结果始终js报错:opener.document.Form1.ManagerId为空或不是对象
错误的意思很明白,但我很郁闷,因为我的A页面明明白白写着:

<asp:TextBox id="ManagerId" runat="server" Visible="false"></asp:TextBox>

右键查看源代码,那个原本隐藏的控件却空了一行,页面根本就没有ManagerId这个东西。
好吧!我猜想<asp:TextBox Visible="false">的设定就是这样的。我换HTML标签<input type="hidden">:

<input type="hidden" runat="server" style="WIDTH:1px" name="ManagerId" >

这回我看到了这个隐藏的对象,但它的id属性值为"_cm01"。
为什么?!为什么不是ManagerId?
问公司的前辈,他们解释说,.net下,当你没有给html标签设置id属性(你设置了name属性),它会自动为它生成一个id属性。如此,就产生了你碰到的问题。

建议:当你没有办法需要在aspx页面使用html标签时,记得给它的id和name属性都赋上值。这样的问题很浪费人时间。
-----------------------------------------------------------------------------------------
下面是一个很愚蠢的错误,很荣幸,我犯下了这个过错:

for(int i = 0; i < dt.Rows.Count ; i++)
{
    DataRow row 
= dt.Rows[i];
    
if(row["ParentId"].ToString().Equals("aa"))
        dt.Rows.Remove(row);            
}


开始我写在foreach循环里,不过会报错,因为foreach的循环机制是——在循环之前将所有的元素加载进内存,然后按循序遍历,当你删除或添加元素,那么元素的次序已经发生了改变,循环就没有办法继续。
上面那个循环的作用是,当字段ParentId值为"aa"时,删除该行。
啊!你不觉得它有任何问题?谢谢你兄弟,你跟我是站一排的。
好吧!它的问题在于,当你删除了一行,还进行i++的操作话,那么跟在你删除的那行后的一样,将会漏过循环。这是很危险滴......
更正:

for(int i = 0; i < dt.Rows.Count ;)
{
    DataRow row 
= dt.Rows[i];
    
if(row["ParentId"].ToString().Length > 0 || !row["ParentId"].ToString().Equals(""))
        dt.Rows.Remove(row);
    
else
        i
++;
}


在这里列出来,即是对自己的一个警醒,也是对大家的一个提示。
------------------------------------------------------------------------------------------------
这是一个小小的发现,有时候,我们会在url里面传递一些参数,例如:
http://****.aspx?UserType=1
而如果你的页面有一个文本框的id也为"UserType"(假设你输入了2),当我们使用这种方式取值时:
Request.Param["UserType"],你将得到"1,2"。
而只有这样Request.QueryString["UserType"]才能得到"1"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值