簡體   English   中英

在runat =“server”之后仍然無法訪問Asp.net div

[英]Asp.net div still not accessible after runat=“server”

我的HTML中有一個div元素。 我在元素中添加了idrunat屬性:

<div id="footer" runat="server"> 

渲染后,查看HTML顯示:

<div id="ctl00_footer">

但是,我無法從頁面的.aspx.cs代碼訪問它:

footer.InnerHtml += "test";

如何從C#代碼訪問該元素?

您可以使用FindControl(“頁腳”),並將其強制轉換為HtmlGenericControl。

HtmlGenericControl footer = (HtmlGenericControl)FindControl("footer")

其中一個原因可能是您沒有該頁面的設計器文件。 所以你不能通過它的ID訪問元素。

只需添加名稱為[您的頁面名稱] .aspx.designer.cs的類 ,打開它,刪除所有代碼,保存它,轉到您的視圖並單擊保存 - 設計者必須從您的視圖中生成所有元素的代碼。 在此之后,您可以按ID訪問元素。

訪問<div id="footer" runat="server"></div>應該沒有問題。 奇怪的是,我生成的標記使div id保持不變為footer
確保您沒有任何編譯錯誤,並且您可以在嘗試訪問此div的同一范圍內訪問運行服務器端的其他元素。

您需要將頁面或控件的ClientIDMode屬性設置為Static:

http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode.aspx

這樣可以防止“ctl00_”被附加到導致問題的ID上。

我之前遇到過這個問題。 您可能將目標div放在另一個沒有runat="server"屬性的div中。 所有嵌套的div都應該具有runat屬性,以便能夠訪問內部元素。

<div id="divContainer" runat="Server">
    <div id="yourDiv" runat="Server">
</div>

如果您要編寫ASP.NET代碼並且想要從服務器端訪問控件,那么您也可以使用提供的控件。

使用Panel而不是Div。 無論如何,ASP:Panel控件在生成的html中呈現為div。 Panel沒有.Text屬性,但您可以從代碼隱藏(例如LabelLiteralControl)向其添加控件。

是否有可能在創建頁面時復制/粘貼頁面? 如果是這樣,請確保對舊頁面的所有引用都更改為新頁面的名稱。 我之前在ASPX頁面頂部的代碼中以及設計器頁面的命名空間中完成了這個。

我有同樣的問題,發現由於“復制”和“粘貼”我的功能有一個“靜態”聲明。 刪除它,因為靜態函數無法訪問非靜態標識符並且已修復。

我有同樣的問題。 我的解決方案是為div元素設置'ID'而不是'id'(即外殼是原因)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM