Чтобы сделать его повторно используемым в качестве элемента управления ASP.NET, он также должен быть безопасным для именования контейнеров, если вы хотите быть уверенным, что его можно безопасно отбрасывать в любом месте или использовать более одного раза на странице.Это означает, что вы должны быть уверены, что вы передаете сценарию ссылку на уникальный идентификатор корня разметки элемента управления (например, ClientID
), и любые другие ссылки относятся к этому.
Но обычно пользовательский элемент управления можно сделать несколькими способами.Если у него нет элементов управления, вы можете включить все ресурсы (HTML и скрипт) как встроенные ресурсы .Элемент управления может на простейшем уровне передавать свои собственные встроенные ресурсы клиенту в методе Render
.
Для работы со сценариями вы можете аналогичным образом использовать ScriptManager
для регистрации своего собственного встроенного JavaScript в качестве клиентского сценария.блок.Однако это не идеально, поскольку ваш сценарий всегда будет включен в блок и, следовательно, вероятно, не будет хорошо кэшироваться клиентами.
Лучший способ - обслуживать встроенные ресурсы с использованием WebResource.axd.
Вот статья , в которой объясняется, как это сделать.
Лично я считаю WebResource
и вложенные ресурсы огромной болью в шее.Вам необходимо поддерживать AssemblyInfo.cs
в синхронизации с ресурсами, и соглашения о именах и пространствах имен всегда кажутся невероятно трудными для получения правильных результатов.Я обнаружил, что гораздо проще просто представить статический метод пользовательского элемента управления, например:
public static Stream GetEmbeddedResource(someResourceIdentifier, out string mimeType) {
/// return a stream of my own embedded resource ... can be used for anything
/// css, js, html
}
, а затем просто создать собственный веб-обработчик для использования в качестве загрузчика ресурсов и потокового содержимого.Это намного проще, и вы также не получите WebResource.axd
включений с 200-символьными строками запроса.