asp:Image 的 url 搞砸了
本文关键字:url Image asp | 更新日期: 2023-09-27 18:32:00
我正在动态地将用户控件添加到我的页面:
- 当用户单击按钮时,jquery ajax 方法将执行,该方法调用我的 Web 方法
- Web 方法返回呈现为字符串的用户控件
- 在 ajax 调用的成功部分中,收到的 HTML 将附加到占位符中
呈现我的用户控件的方法:
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:Image元素的ImageUrl有问题(我的用户控件包含多个元素,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
总是在它前面收到两个点和一个斜杠。有什么想法可以防止吗?
编辑 - 项目结构:
根:
- 图像
- 删除.gif
- 。
- 网页控件
- MyWebControl.ascx
- 。
- MyWebService.asmx
- 我的页面.aspx
当用户控件添加到 aspx 网页时,它会查找相对于您的网页路径的图像,两个带有正斜杠的点../
表示返回 1 步,在您的情况下,它会搜索对MyPage.aspx
无效的../images/delete.gif
,因为您的网页和images
文件夹都在root
下。
将用户控件和网页放在同一文件夹中,或将路径更改为 images/delete.gif
。
编辑:以下层次结构不需要您将用户控件/网页放在同一文件夹中或更改images
文件夹的路径。
根:
-
图像
删除.gif...
-
网页控件
MyWebControl.ascx ...
-
网页
我的页面.aspx
现在,我只是向我的 Web 控件添加了一个重写方法:
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)
...