Как встроить ресурс статического изображения в элемент управления веб-сервера? - PullRequest
2 голосов
/ 15 февраля 2010

Я собираюсь создать элемент управления веб-сервера, представляющий древовидную структуру. Поэтому я хочу использовать 2 изображения для + и - для расширения / свертывания. Как я могу встроить это в элемент управления таким образом, чтобы его можно было использовать в качестве источника изображения при визуализации на странице?

Поскольку это будет в скомпилированной библиотеке веб-элементов управления, я не хочу полагаться на внешние изображения в веб-приложении.

Edit:
Основываясь на этом ответе Andre Kraemer Я сделал следующее:

В AssemblyInfo.vb:

<Assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.Resources.plus.gif", "image/gif")> 
<Assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.Resources.minus.gif", "image/gif")> 

В моем RenderContents переопределении:

Dim lPlusImage As New WebControls.Image()
Dim lMinusImage As New WebControls.Image()
lPlusImage.ImageUrl = Page.ClientScript.GetWebResourceUrl(Me.GetType(), "MyCompany.MyWebControls.Resources.plus.gif")
lMinusImage.ImageUrl = Page.ClientScript.GetWebResourceUrl(Me.GetType(), "MyCompany.MyWebControls.Resources.minus.gif")
lPlusImage.RenderControl(output)
lMinusImage.RenderControl(output)

Моя сборка называется MyWebControls.

Моё корневое пространство имен - MyCompany.MyWebControls.

Изображения plus.gif и minus.gif находятся в папке с именем Resources, и изображения имеют Действие построения , установленное на Встроенный ресурс .

Это все еще не работает. Я не получаю ошибок. Я попробовал сгенерированный URL-адрес изображения прямо в браузере, бот ничего не происходит, просто пустая страница.

Примечание:
Я попытался использовать неверный путь в имени ресурса, и результат был точно таким же, что заставило меня задуматься, нужно ли мне делать что-то особенное, чтобы сопоставить реальный ресурс с именем ресурса. Я получаю ошибку 404 Not Found, только если я использую в коде другое имя, отличное от того, которое было указано в AssemblyInfo, это никак не связано с указанием пути к реальному ресурсу!

Edit:

Я нашел решение !

Я обнаружил, что это разница между C # и VB. Смотрите мой ответ на этот вопрос.

Ответы [ 3 ]

4 голосов
/ 15 февраля 2010

добавьте два изображения в подпапку с названием images вашего проекта управления древовидной структурой. Затем измените их действие сборки в сетке свойств с контента на встроенный ресурс.

В дополнение к этому вам необходимо зарегистрировать эти два изображения как встроенные ресурсы для вашей сборки в файле assemblyinfo.cs, например:

[assembly: System.Web.UI.WebResource("YourProjectsNameSpace.Images.plus.gif", "img/gif")]
[assembly: System.Web.UI.WebResource("YourProjectsNameSpace.Images.minus.gif", "img/gif")]

Поскольку эти изображения теперь будут встроены в вашу сборку элементов управления, вы можете получить к ним доступ, используя ClientScriptManager, например:

string plusImageUrl  = Page.ClientScript.GetWebResourceUrl(this.GetType(), "YourProjectsNameSpace.Images.plus.gif");
string minusImageUrl  = Page.ClientScript.GetWebResourceUrl(this.GetType(), "YourProjectsNameSpace.Images.minus.gif");
2 голосов
/ 11 марта 2010

ОК, я нашел ответ в этой статье . Я благодарю Андре Крамера как принятый ответ, потому что он указал мне правильное направление. Он не мог знать, что существует небольшая разница в структуре имен между C # и VB!

Вот решение, которое работает для VB:

Важным отличием является то, что в VB путь к файлу не включен в имя.

В моем примере корневое пространство имен в проекте - MyCompany.MyWebControls, а файлы изображений находятся в подпапке с именем Resources. В C # подпапка является частью структуры имени ресурса, но не в VB.

В C # это будет:

[assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.Resources.plus.gif", "image/gif")]

В VB мы должны игнорировать путь к файлу в пути к имени ресурса:

<Assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.plus.gif", "image/gif")> 

Итак, когда мы узнаем это, мой полный пример будет:

В AssemblyInfo.vb:

<Assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.plus.gif", "image/gif")> 
<Assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.minus.gif", "image/gif")> 

В моем RenderContents переопределении:

Dim lPlusImage As New WebControls.Image()
Dim lMinusImage As New WebControls.Image()
lPlusImage.ImageUrl = Page.ClientScript.GetWebResourceUrl(Me.GetType(), "MyCompany.MyWebControls.plus.gif")
lMinusImage.ImageUrl = Page.ClientScript.GetWebResourceUrl(Me.GetType(), "MyCompany.MyWebControls.minus.gif")
lPlusImage.RenderControl(output)
lMinusImage.RenderControl(output)

И вуаля, это работает!

1 голос
/ 15 февраля 2010

Ваше изображение -> Свойства -> Создать действие -> Встроенный ресурс. Он будет скомпилирован с вашим элементом управления или библиотекой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...