عندما كنت إنشاء مثيل usercontrol ASP.NET في وقت التشغيل، فلماذا تجاهل ملف ASCX؟

StackOverflow https://stackoverflow.com/questions/441299

سؤال

ولقد خلق عنصر تحكم المستخدم ASP.NET العادية، بما في ذلك ملف ASCX. على سبيل المثال:

MyUserControl.ascx
MyUserControl.ascx.cs

وبعد ذلك أحاول تقديم عنصر التحكم يدويا، في وقت التشغيل، وذلك باستخدام رمز مشابهة التعليمة البرمجية التالية:

var testMyUserControl = new MyUserControl();
var textWriter = 
    new HtmlTextWriter(
        new System.IO.StringWriter(new StringBuilder()));
testMyUserControl.RenderControl(textWriter);
Console.Write(textWriter.InnerWriter.ToString());

وليس أن أضع في ملف ASCX يبدو لتقديم - إما HTML ثابتة أو أي ضوابط .NET.

ولكن إذا كنت تجاوز أسلوب التقديم () في محتوى إخراج التعليمات البرمجية الخلفية ويدويا، فإنه لا تجعل.

ما أنا في عداد المفقودين هنا؟

هل كانت مفيدة؟

المحلول

ولست بحاجة لجعل تحكم بنفسك. إذا كنت بحاجة إلى إضافته إلى صفحة حيوي، يمكنك أن تفعل ذلك مثل:

UserControl myControl = (UserControl) Page.LoadControl("~/Controls/MyControl.ascx");
Page.Controls.Add(myControl);

وعلى الأرجح سترغب في وضعه في جزء معين من الصفحة، لذلك بدلا من استخدام Page.Controls، استخدم عنصر نائب:

<asp:Placeholder ID="myPlaceHolder" runat="server" />

وواستخدام التعليمات البرمجية مثل هذا:

myPlaceholder.Controls.Add(myControl);

وهذا هو أفضل وسيلة لإضافة عنصر تحكم <م> حيوي ، ولكن إذا كنت تستطيع ان تفعل ذلك إلزامي بدلا من ذلك سيكون أسهل كثيرا.

<%@ Register TagPrefix="my" TagName="Control" Src="~/Controls/MyControl.ascx" %>

<my:Control ID="myControl" runat="server" />

وتذكر: إذا كنت إضافة عنصر التحكم حيوي، تأكد من إعادة إضافته مراقبة كل تحميل الصفحة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top