asp的网址:图片搞砸了

时间:2012-04-24 05:33:16

标签: c# jquery asp.net html url

我正在动态地将usercontrols添加到我的页面:

  • 当用户点击按钮时,执行jquery ajax方法,该方法调用我的Web方法
  • web方法返回呈现为字符串
  • 的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();
}

这可行,但我的asp的ImageUrl有问题:Image元素(我的usercontrol包含多个元素,asp:Image只是其中之一):

<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总是会收到两个点,并且在它前面有一个斜线。任何想法如何预防?

编辑 - 项目结构:

根:

  • 图像
    • delete.gif
    • ...
  • 器WebControls
    • MyWebControl.ascx
    • ...
  • MyWebService.asmx
  • MyPage.aspx

2 个答案:

答案 0 :(得分:1)

当用户控件添加到aspx网页时,它会查找相对于您的网页路径的图像,带有正斜杠的两个点../表示返回1步,在您的情况下搜索{{1由于您的网页和../images/delete.gif文件夹位于MyPage.aspx下,因此images无效。

将用户控件和网页放在同一文件夹中,或将路径更改为root

修改:以下层次结构不要求您将用户控件/网页放在同一文件夹中或更改images/delete.gif文件夹的路径。

根:

  • 图像

    delete.gif ...

  • 器WebControls

    MyWebControl.ascx     ...

  • 网页

    MyPage.aspx

答案 1 :(得分: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');
});

编辑 - 我可能还可以将CssClass设置为图像按钮并使用css设置background: url(../images/add.gif) ...