程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 項目小問題的總結之二

項目小問題的總結之二

編輯:.NET實例教程
我遇到這樣一個需求,在頁面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"  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"。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved