2012-05-07 31 views
6

Tôi có trang chính và tất cả các trang của tôi đang kế thừa trang đó. Để định dạng, tôi nghĩ rằng để đặt nội dung khác với một trang khác trong một ContentPlaceHolder.Cách lập trình thêm nội dung vào contentPlaceHolder?

Bây giờ, làm thế nào tôi có thể chèn mọi thứ vào đó? Kể từ khi tôi đang lập kế hoạch để cư ContentPlaceHolder với các công cụ từ một cơ sở dữ liệu tôi cho rằng tôi sẽ phải làm điều đó theo chương trình.

  1. Làm cách nào để thêm điều khiển vào Trình giữ nội dung? Tôi đã kiểm tra answers khác nhưng tôi không thể truy cập bằng ID của nó.

  2. Tôi có nên sử dụng nhiều ContentPlaceHolders từ việc bắt đầu không? Giả sử tôi muốn đưa phim. Nên có chỉ có một với tất cả các hình ảnh và mô tả và xếp hạng, quặng một ContentPlaceHolder cho mỗi điều?

Tôi mở cho các giải pháp khác vì tôi không có kinh nghiệm về ASP.

Trả lời

2

gì thường xảy ra là

  1. bạn thiết lập các trang chủ của bạn với html đúng đắn và ContentPlaceHolder s
  2. bạn tạo các trang dựa tắt rằng trang chủ. Nếu bạn sử dụng Visual Studio và yêu cầu tạo trang mới dựa trên trang Chính hiện tại, nó sẽ thêm các khu vực Content cho bạn.
  3. bạn thêm nội dung vào các khu vực Nội dung trong trang mới được tạo.

Nếu bạn muốn tự động thêm điều khiển vào trang chính (hoặc bất kỳ), bạn có thể thêm điều khiển vào bất kỳ kiểm soát hiện có nào. Nếu nó không được bọc trong bất kỳ cách nào, chỉ cần thêm một Placeholder (nó là một điều khiển asp.net).

+0

Tôi xin lỗi, điều đó thực sự không giải quyết được vấn đề của tôi. Tôi cần một số mã để đặt chương trình, giả sử, một số văn bản, vào khu vực Nội dung đó, vì tôi không thể truy cập nó từ trang CodeBehind. Tôi có trang default.aspx và ContentPlaceHolder có ID = content1. Trong default.aspx.cs tôi không thể "xem" content1. –

+0

Tôi hiểu. Có lý do gì khiến bạn không thể đặt trình giữ chỗ trong vùng 'Nội dung' của trang không? Bạn chắc chắn có thể thêm những thứ vào đó: – JayC

+0

Ví dụ: 'Label lbl = new Label(); lbl.Text = "cái gì đó"; placeHolder.Controls.Add (lbl); ' – JayC

1

tôi đã làm như thế này

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 
<asp:Literal ID="jsstuff" runat="server"></asp:Literal> 
</asp:Content> 

Và điều này đã đi vào mã sau:

string stuff = @"<script type=""text/javascript""> 
             var searchBox = 0; 
             var currentCountry = ''; 
             </script>"; 
        jsstuff.Text = stuff; 
10

Cũ câu hỏi ... nhưng tôi chỉ chạy vào vấn đề này và đây là # 1 bài mà giữ sắp xuất hiện trên Google, vì vậy, tôi sẽ thêm câu trả lời của mình vì những người khác không hoạt động trong trường hợp của tôi.

Sau đây là cách tôi đã làm nó khi một thường xuyên <asp:Content sẽ không hoạt động (mặc dù trong sử dụng bình thường, câu trả lời @JayC là cách bạn làm điều đó):

MasterPage có này ContentPlaceHolder:

<asp:ContentPlaceHolder ID="ScriptsPlace" runat="server"></asp:ContentPlaceHolder> 

Đã phải thêm động một số JavaScript từ Kiểm soát người dùng. Cố gắng sử dụng ContentPlaceHolder trực tiếp cho lỗi này:

Parser Error Message: Content controls have to be top-level controls in a content page or a nested master page that references a master page.

Vì vậy, tôi muốn thêm đoạn mã từ mã-đằng sau.Đây là trang Load cho file .ascx:

protected void Page_Load(object sender, EventArgs e) 
{ 
    ContentPlaceHolder c = Page.Master.FindControl("ScriptsPlace") as ContentPlaceHolder; 
    if (c != null) 
    { 
     LiteralControl l = new LiteralControl(); 
     l.Text="<script type=\"text/javascript\">$(document).ready(function() {js stuff;});</script>"; 
     c.Controls.Add(l); 
    } 
} 

UPDATE: Vì vậy, nó quay ra tôi đã sử dụng điều này ở nhiều nơi hơn hơn tôi mong đợi, và kết thúc bằng một cách mà là linh hoạt hơn nhiều/có thể đọc được . Trong kiểm soát người dùng chính nó, tôi chỉ bọc javascript và bất cứ điều gì khác mà cần thiết để được di chuyển với một thường xuyên div.

<div id="_jsDiv" runat="server"> 
    $(document).ready(function() { 
     //js stuff 
    }); 
    Other server controls or HTML junk 
</div> 

Và sau đó mã phía sau sẽ tìm thấy div đó, sau đó di chuyển nó vào ContentPlaceHolder.

protected void Page_Load(object sender, EventArgs e) 
{ 
    ContentPlaceHolder c = Page.Master.FindControl("ScriptsPlace") as ContentPlaceHolder; 
    HtmlGenericCOntrol jsDiv = this.FindControl("_jsDiv") as HtmlGenericControl; 
    if (c != null && jsDiv != null) 
    { 
     c.Controls.Add(jsDiv); 
    } 
} 

Tôi thực sự đặt mã này trong một điều khiển người dùng tùy chỉnh, và tôi chỉ có các điều khiển người dùng thường xuyên của tôi kế thừa từ sự kiểm soát người dùng tùy chỉnh, do đó khi tôi quấn javascript/etc với một <div id="_jsDiv" runat="server">, kiểm soát người dùng tùy chỉnh mất chăm sóc phần còn lại và tôi không phải làm bất cứ điều gì trong mã phía sau của điều khiển người dùng.

+0

Điều này hoạt động rực rỡ. Nó thậm chí có thể được mở rộng để bao gồm một tham số điều khiển cho tên trình giữ chỗ. Tôi đã sử dụng giải pháp này khi tôi cần lập trình đặt một tệp javascript trong một chuỗi/vị trí cụ thể và không có trong tiêu đề. – secretwep

0

Nếu không gian tên cho nội dung Trang và trang chính không giống nhau thì điều khiển trang nội dung không thể truy cập trong Codebehind trong trang nội dung.

Ngoài ra, hãy kiểm tra tệp thiết kế của bạn. nếu điều khiển không được liệt kê trong tệp thiết kế thì hãy xóa tệp và tạo lại (project-> chuyển đổi sang ứng dụng web)

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