Я создал собственный элемент управления ASP.NET, и он работает нормально, когда я добавляю его вручную (перетаскивание) или по коду в элементы управления в разметке.
В пользовательском элементе управления MsgBox были встроены такие ресурсы, как JavaScript, CSS и изображения, и возникла проблема, когда я попытался отобразить элемент управления в классе, чтобы вернуть его HTML-код, экземпляр страницы имеет значение null, и это необходимо для «GetWebResourceUrl»:
Page.ClientScript.GetWebResourceUrl(.....)
есть ли способ получить ресурсурл? Вот мой код рендеринга:
protected override void RenderContents(HtmlTextWriter writer)
{
using (PlaceHolder plh = new PlaceHolder())
{
if (Page != null)
{
if (DesignMode || Page.Header == null)
RegisterCSSInclude(plh);
}
HtmlGenericControl container = new HtmlGenericControl("div");
container.EnableViewState = false;
container.InnerHtml = "Control html code";
plh.Controls.Add(container);
plh.RenderControl(writer);
}
}
RegisterCSSInclude - метод регистрации моих css-файлов:
private void RegisterCSSInclude(Control target)
{
// CSS
bool linkIncluded = false;
foreach (Control c in target.Controls)
{
if (c.ID == "MsgBxStyle")
{
linkIncluded = true;
}
}
if (!linkIncluded)
{
HtmlGenericControl globalCsslink = new HtmlGenericControl("link");
globalCsslink.ID = "MsgBxGStyle";
globalCsslink.Attributes.Add("href", Page.ClientScript.GetWebResourceUrl(typeof(MessageBoxCtrl), "MessageBox.MsgBxStyles.WeDevMsgBox.css"));
globalCsslink.Attributes.Add("type", "text/css");
globalCsslink.Attributes.Add("rel", "stylesheet");
globalCsslink.EnableViewState = false;
target.Controls.Add(globalCsslink);
HtmlGenericControl csslink = new HtmlGenericControl("link");
csslink.ID = "MsgBxStyle";
csslink.Attributes.Add("href", Page.ClientScript.GetWebResourceUrl(typeof(MessageBoxCtrl), "MessageBox.MsgBxStyles." + Style.ToString().ToLower() + ".css"));
csslink.Attributes.Add("type", "text/css");
csslink.Attributes.Add("rel", "stylesheet");
csslink.EnableViewState = false;
target.Controls.Add(csslink);
}
}
Обновление:
PS: я пытаюсь использовать элемент управления в универсальном обработчике (ashx), где я вызываю метод ShowMsgBox, который является методом в классе, а не на странице или пользовательском элементе управления.
Метод ShowMsgBox должен создать экземпляр элемента управления MsgBox и отобразить его, а затем вернуть html-код в класс ashx:
var htmlCode = MyClass.ShowMsgBox ("myMsg");
context.Response.write (htmlCode); * +1019 *