2008-10-03 24 views
24

Tôi đang cố gắng đặt thuộc tính cho điều khiển html IFRAME từ tệp aspx.cs mã phía sau.Làm cách nào để truy cập IFRAME từ tệp codebehind trong ASP.NET?

Tôi đã xem qua một post nói rằng bạn có thể sử dụng FindControl để tìm các điều khiển phi asp sử dụng:

Các tập tin aspx chứa:

<iframe id="contentPanel1" runat="server" /> 

và sau đó là code-behind tập tin chứa:

protected void Page_Load(object sender, EventArgs e) 
{ 
    HtmlControl contentPanel1 = (HtmlControl)this.FindControl("contentPanel1"); 
    if (contentPanel1 != null) 
     contentPanel1.Attributes["src"] = "http://www.stackoverflow.com"; 

} 

Ngoại trừ việc không tìm thấy điều khiển, contentPanel1 rỗng.


Cập nhật 1

Nhìn vào html hiển thị:

<iframe id="ctl00_ContentPlaceHolder1_contentPanel1"></iframe> 

tôi đã cố gắng thay đổi mã-đằng sau để:

HtmlControl contentPanel1 = (HtmlControl)this.FindControl("ctl00_ContentPlaceHolder1_contentPanel1"); 

if (contentPanel1 != null) 
    contentPanel1.Attributes["src"] = "http://www.clis.com"; 

Nhưng nó đã không giúp đỡ .

tôi đang sử dụng MasterPage.


Cập nhật 2

Thay đổi tập tin aspx để:

<iframe id="contentPanel1" name="contentPanel1" runat="server" /> 

cũng không giúp


trả lời

Câu trả lời là hiển nhiên và không đáng tin cậy ngay cả khi đặt câu hỏi gốc. Nếu bạn có mã aspx:

<iframe id="contentPanel1" runat="server" /> 

và muốn truy cập vào iframe từ code-behind file, bạn chỉ cần truy cập vào nó:

this.contentPanel1.Attributes["src"] = "http://www.stackoverflow.com"; 
+0

Bạn đang sử dụng trang chính? –

+0

Tại sao có, tôi có. –

+0

Nhìn vào HTML được hiển thị (nguồn xem) và tìm id được hiển thị của iFrame. Sử dụng điều đó trong mã của bạn. Chúng tôi có thể xóa nó sau này, nhưng chỉ cần thử điều đó. –

Trả lời

11

Nếu iframe là trực tiếp trên trang nơi mã đang chạy, bạn sẽ có thể tham khảo trực tiếp:


contentPanel1.Attribute = value; 

Nếu không được (đó là trong một điều khiển con, hoặc MasterPage) , bạn sẽ cần một ý tưởng tốt về hệ thống phân cấp của trang ... Hoặc sử dụng phương pháp brute-force để viết một phiên bản đệ quy của FindControl().

+0

Bạn nói đúng. tôi chỉ mù quáng vấp phải nó khi tìm kiếm tìm kiếm đệ quy của RyanFetz. this.contentPanel1.Attributes ["src"] = "http://www.stackoverflow.com"; hoạt động tốt! tôi chỉ giả định nó sẽ không hoạt động vì nó không phải là một asp: kiểm soát iframe. tôi giả sử runat = máy chủ làm cho nó hoạt động? –

+1

Vâng, bằng cách sử dụng runat = server làm cho nó một điều khiển phía máy chủ của một số loại. – AaronSieb

0

Hãy thử instantiating contentPanel1 bên ngoài sự kiện Load; giữ nó toàn cầu cho lớp học.

+0

Bất kỳ đề xuất nào về vị trí đó? –

+0

Một chút của vocab ở đây - Instantiating thường có nghĩa là thực sự tạo ra đối tượng dụ. Những gì anh ta làm ở đó chỉ đơn thuần là lấy một tham chiếu đến một đối tượng hiện có (được tạo ra bởi mã được sinh ra) từ một phương thức trang. –

1

Hãy thử sử dụng

this.Master.FindControl ("contentId"). FindControl ("controlId")

để thay thế.

0

Phương thức FindControl tìm trong các điều khiển con của "điều khiển" mà phương thức được thực thi. Hãy thử xem qua bộ sưu tập kiểm soát đệ quy.

protected virtual Control FindControlRecursive(Control root, String id) 
    { 
     if (root.ID == id) { return root; } 
     foreach (Control c in root.Controls) 
     { 
      Control t = FindControlRecursive(c, id); 
      if (t != null) 
      { 
       return t; 
      } 
     } 
     return null; 
    } 
+0

Anh ấy biết nó ở đâu; giải pháp của bạn là một búa khoan friggen, nơi một cái búa tack sẽ làm. – Will

0

Hãy thử điều này.

ContentPlaceHolder cplHolder = (ContentPlaceHolder) this.CurrentMaster.FindControl ("contentMain");

HtmlControl cpanel = (HtmlControl) cplHolder.FindControl ("contentPanel1");

12

Điều này phù hợp với tôi.

ASPX:

<iframe id="ContentIframe" runat="server"></iframe> 

tôi có thể truy cập trực tiếp thông qua iframe id.

Mã Đằng sau:

ContentIframe.Attributes["src"] = "stackoverflow.com"; 
+0

Đây thực sự là con đường để đi! –

+0

Và trường sẽ giống như thế này 'bảo vệ toàn cầu :: System.Web.UI.HtmlControls.HtmlGenericControl ContentIframe' vì không có Iframe cụ thể WebControl –

0
<iframe id="yourIframe" clientIDMode="static" runat="server"></iframe> 

Bạn họ sẽ có thể tìm iframe của bạn bằng cách sử dụng phương pháp FindControl.

cài đặt clientIDMode để Static ngăn không cho đối tượng của bạn được đổi tên khi hiển thị.

0

Không đề xuất của bạn làm việc cho tôi, đây là giải pháp của tôi:

add src="<%=_frame1%>" //to the iframe id="frame1" html control 
public string _frame1 = "http://www.google.com"; 
1

đâu iframe bạn nhúng?

Có mã này

<body> 

<iframe id="iFrame1" runat="server"></iframe> 

<form id="form1" runat="server"> 

<div> 
     <iframe id="iFrame2" runat="server"></iframe> 
</div> 
</form> 

Tôi có thể truy cập với iFrame1.Attributes["src"] chỉ để iFrame1 và không iFrame2.

Ngoài ra, bạn có thể truy cập vào bất kỳ yếu tố trong hình thức của bạn với:

FindControl("iFrame2") as System.Web.UI.HtmlControls.HtmlGenericControl 
-1

trang aspx

<iframe id="fblikes" runat="server"></iframe> 

Mã đằng sau

this.fblikes.Attributes [ "src"] = "/productdetails/fblike.ashx";

Rất đơn giản ....

+0

Tôi không biết ....... :( –

Các vấn đề liên quan