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.
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. –
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
Ví dụ: 'Label lbl = new Label(); lbl.Text = "cái gì đó"; placeHolder.Controls.Add (lbl); ' – JayC