asp.net問題點集合

來源:互聯網
上載者:User

    這篇是集合在寫asp.net程式中碰到的各種問題集合。平時遇到的問題慢慢累積在這兒,以後碰到時,有個印象,也好到這兒來尋找解答。

目錄

   a. 在母板頁中,為什麼重新整理後使用Request.params取不到控制項中的值

1.在母板頁中,為什麼重新整理後使用Request.params取不到控制項中的值

   今天碰到一個很奇怪的現象,在一個如下的母板頁中: 

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
    <asp:Button ID="Button2" runat="server" Text="Button" /> 
    <asp:Label ID="Label1" runat="server" ForeColor="#CCFFCC" Text="BBB"></asp:Label> 
    <asp:TextBox ID="TextBox1" runat="server" Text="bbb"></asp:TextBox> 
</asp:Content> 

     然後在Page_load函數中編輯如下代碼: 

protected void Page_Load(object sender, EventArgs e) 

     Label1.Text = Request.Params["TextBox1"]; 

     按照理解,在點擊Button後,Label1會顯示TextBox1中的值。但是結果什麼也沒有。原因是: 

MSDN解釋:任何實現該介面的控制項都建立一個新的命名空間,在這個新的命名空間中,所有子控制項 ID 屬性在整個應用程式內保證是唯一的。由該介面提供的標記允許在支援資料繫結的 Web 伺服器控制項內唯一命名動態產生的伺服器控制項執行個體。這些控制項包括 Repeater、DataGrid、DataList、CheckBoxList、ChangePassword、LoginView、Menu、SiteMapNodeItem 及 RadioButtonList 控制項。

 

其它解釋: 
   .Request.Form根據ClientID擷取值,而不是ID。嵌套在Repeater或者FormView這類控制項裡面,ClientID是自身ID加上容器控制項的ID作為首碼,因此不同於ID本身。  
   .因為嵌套了容器控制項,所以在Page層級進行FindControl也是找不到的,你要在容器控制項上做FindControl。 

上面的例子應該修改成: 

protected void Page_Load(object sender, EventArgs e) 

    TextBox tb = (TextBox)Page.Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1"); 
    Label1.Text = tb.Text; 

    當然,以上針對伺服器控制項來看,好像是多餘了,直接使用Label1.Text = TextBox1.Text就可以了。
    但是,如果是HTML控制項,這樣就比較有效果了。比如: 

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
        <ContentTemplate> 
            <input type=hidden id="Dynamic_UserControl_Hidden1" runat="server" />   // HTML控制項 
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" OnClientClick="ShowControl()" /> 
        </ContentTemplate> 
    </asp:UpdatePanel> 
</asp:Content> 

     以上,在頁面重新整理後想取得Dynamic_UserControl_Hidden1中的值,可以這樣: 

protected void Page_Load(object sender, EventArgs e) 

    // 嵌套容器,在容器上做FindControl 
    HtmlInputHidden hiHidden = (HtmlInputHidden)UpdatePanel1.ContentTemplateContainer.FindControl("Dynamic_UserControl_Hidden1"); 
    Label1.Text = hiHidden.Value; 

    然後,還有一個就是javascript的問題:
    在指令碼中使用以下語句會得到"為空白或不是對象"的錯誤
       document.getElementById("TextBox1").value
    主要原因也是因為在產生頁面後,控制項的ID被變掉了。可以使用以下語句
       document.getElementById("<%=TextBox1.ClientId%>”).value;
    具體的,可以查詢以下幾個URL:
        http://www.itstrike.cn/Home/Article/Asp.net-in-the-master-page-ID-of-the-control-treatment
        http://topic.csdn.net/u/20080503/18/205102e1-7f6c-4858-970e-f7b9ce390b0e.html
        http://msdn.microsoft.com/zh-cn/library/system.web.ui.inamingcontainer%28VS.85%29.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.