2012-04-24 1 views
2

я динамически добавлять UserControls на мою страницу:Url для жереха: Изображение испортится

  • , когда пользователь нажимает на кнопку, метод JQuery Ajax выполняет, который вызывает мой веб-метод
  • веб- метод возвращает мой UserControl визуализируется как строку
  • в успехе части Ajax называют полученного HTML добавляется в заполнитель

метод, чтобы сделать свой UserControl:

public static string RenderUserControlAsString(string path) 
{ 
    var page = new PageOverride(); 
    var viewControl = (UserControl)page.LoadControl(path); 
    page.Controls.Add(viewControl); 
    var output = new StringWriter(); 
    HttpContext.Current.Server.Execute(page, output, true); 
    return output.ToString(); 
} 

Это работает нормально, но у меня есть проблемы с ImageUrl моего жерех: элемент изображения (мой UserControl содержит несколько элементов и жерех: Изображение только один из них):

<asp:Image ID="imgDelete" runat="server" ImageUrl="~/images/delete.gif" onmouseover="this.style.cursor='hand'" onmouseout="this.style.cursor='default'"/> 

В ImageUrl преобразуется до ../images/delete.gif, что не в порядке. Фактически, ImageUrl всегда получает две точки и косую черту. Любые идеи, как предотвратить это?

Edit - структура проекта:

Корень:

  • изображения
    • delete.gif
    • ...
  • WebControls
    • MyWebControl.ascx
    • ...
  • MyWebService.asmx
  • MyPage.aspx
+0

В какие папки вашего пользовательского элемента управления и страница находится? – Coder

+0

@Coder: добавлена ​​структура проекта к вопросу, см. Мое редактирование. – sventevit

+0

См. Ответ. – Coder

ответ

0

На данный момент я просто добавил метод замены для моего веб-управления:

protected override void OnPreRender(EventArgs e) 
{ 
     base.OnPreRender(e); 

     // Don't use ImageUrl, set fixed src attribute. 
     imgDelete.Attributes["src"] = "images/delete.gif"; 
} 

Недостатком является то, что изображение отображается только на страницах, которые находятся в корневой папке, но это работает для меня.

Другой способ с JQuery плагин livequery:

$('.Delete').livequery(function() { 
    $(this).attr('src', 'images/delete.gif'); 
}); 

Edit - я мог бы также установить CssClass на кнопку изображения и установить background: url(../images/add.gif) с помощью CSS ...

1

Когда пользовательский элемент управления будет добавлен к ASPX странице, он ищет изображений относительно вашей путь к странице, две точки с косой чертой ../ означает вернуться на 1 шаг, в вашем случае он ищет ../images/delete.gif, что не подходит для MyPage.aspx, так как у вашей интернет-страницы и images папки находятся под root.

Поместите свой пользовательский элемент управления и веб-страницу в ту же папку или измените путь до images/delete.gif.

Редактировать: Следующая иерархия не требует размещения пользовательского элемента управления/веб-страницы в той же папке или изменения пути к папке images.

Корень:

  • изображения

    delete.gif ...

  • WebControls

    MyWebControl.ascx ...

  • WebPages

    MyPage.aspx

+0

Спасибо, это сработает, но сейчас я не хочу менять структуру проекта ... – sventevit

Смежные вопросы