Как зарегистрировать настраиваемый серверный контроль на странице ASP.NET
У меня есть проект, и я пытаюсь зарегистрировать настраиваемый серверный элемент управления (на нем нет файла .ascx
). В настоящее время я использую
Декларация класса
namespace MyApp.Controls{
public class CustomControl: WebControl{
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["Text"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
}
На моей странице
<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" %>
<myControls:CustomControl runat="server" Text="What up!" />
Я получаю ошибку Parser с сообщением "Неизвестный тег сервера" myControls: CustomControl ".
Что я делаю неправильно?
Ответы
Ответ 1
Хорошо, если этот элемент управления находится в другой библиотеке классов или даже если он в одном и том же, было бы неплохо указать контрольную сборку в @Register:
<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" Assembly="MyApp" %>
<myControls:CustomControl runat="server" Text="What up!" />
Очистите и перестройте свое решение, чтобы убедиться, что все правильно составлено!
Ответ 2
Вы должны поместить свое управление либо в папку App_Code
(в случае, если элемент управления не находится в сборке), либо добавить ссылку на сборку, где находится этот элемент управления:
<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls"
Assembly="SomeAssembly" %>
Но угадывая, ваш контроль не под папкой App_Code
.
Ответ 3
Если ваш элемент управления будет повторно использоваться на нескольких страницах, вы можете захотеть зарегистрировать его в web.config, как один из подэлементов system.web/pages/controls вместо копирования, вставляя тег < @Register во всех затронутых страницы.
web.config:
<system.web>
<pages ...>
<controls>
...
<add tagPrefix="myCompany" namespace="MyCompany.Whatever.Controls" assembly="Whatever"/>
</controls>
thepage.aspx:
<myCompany:ControlClassName ID="TheStuff" runat="server" ... />
Ответ 4
Добавьте атрибут сборки в свой тег register