Встраивание изображений в пользовательский ASP.Net AJAX Extender - PullRequest
0 голосов
/ 31 января 2012

Я создал собственный расширитель, используя ASP.Net AJAX Control Toolkit.Ниже приведен фрагмент из моего класса расширителя.

using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using AjaxControlToolkit;

[assembly: WebResource("CustomExtenders.ListComplete.ListCompleteBehavior.js", "text/javascript")]
[assembly: WebResource("CustomExtenders.ListComplete.style.css", "text/css")]
[assembly: WebResource("CustomExtenders.ListComplete.close.gif", "image/gif")]

namespace CustomExtenders.ListComplete
{
    [Designer(typeof(ListCompleteDesigner))]
    [ClientScriptResource("CustomExtenders.ListCompleteBehavior", "CustomExtenders.ListComplete.ListCompleteBehavior.js")]
    [ClientCssResource("CustomExtenders.ListComplete.style.css", LoadOrder = 1)]
    [TargetControlType(typeof(ListBox))]
    public class ListCompleteExtender : ExtenderControlBase
    {

Приведенные выше файлы js и css отлично загружаются вместе со сборкой, но не копируют изображение gif в каталог приложения.CSS в style.css ссылка close.gif, но он не находит его там.

Я установил для свойства Build Action значение Embedded Resource, и это не помогает.

Кто-нибудь знает, как я могу встроить этот ресурс.

1 Ответ

0 голосов
/ 01 февраля 2012

Ну, я исправил это сам с небольшим обходом (или взломать).

Я переопределил событие OnInit в вышеприведенном классе ListCompleteExtender следующим образом:

 protected override void OnInit(System.EventArgs e)
    {
        base.OnInit(e);

        string closeImageUrl = Page.ClientScript.GetWebResourceUrl(this.GetType(), "CustomExtenders.ListComplete.close.gif");

        //LiteralControl include = new LiteralControl(closeImageUrl);

        Label lblCloseImageUrl = new Label();
        lblCloseImageUrl.ID = "lblCloseImageUrlListCompleteExtender";
        lblCloseImageUrl.ViewStateMode = ViewStateMode.Disabled;
        lblCloseImageUrl.EnableViewState = false;
        lblCloseImageUrl.Text = closeImageUrl;
        lblCloseImageUrl.Attributes["style"] = "display: none;";

        this.Page.Header.Controls.Add(lblCloseImageUrl);
    }

Как вы могли видеть в предыдущем коде, я смог загрузить изображение close.gif в сборке, но не смог найти ссылку на него.

Я извлек URL указанного выше изображения и записал его в элемент управления Label с идентификатором lblCloseImageUrlListCompleteExtender. Я поместил ярлык в заголовок страницы, скрыл его и отключил ViewState, чтобы сделать его максимально легким.

Теперь измените javascript расширителя и добавьте следующие строки после javascript элемента управления отображением:

        var imgCloseUrl = $("#lblCloseImageUrlListCompleteExtender").text()
        var closebuttonStyle = getCSSRule('ul.holder li.bit-box a.closebutton');
        closebuttonStyle.style.background = 'url("' + imgCloseUrl + '") repeat scroll 0 0 transparent';

Используемая выше функция getCSSRule взята из здесь .

Мы только что сделали здесь, изменив CSS, используемый для отображения close.gif, чтобы указать URL-адрес изображения, извлеченного из сборки.

...