Asp.net 将~添加到相对url

Asp.net 将~添加到相对url,asp.net,html,Asp.net,Html,我在我的项目中使用了一些相对的url,比如,但我们的顾问坚持要求我将每个url更改为~/images/…,因为它们是html控件,我必须为每个url添加runat=“server”标记,所以我的问题是这是否必要?我有两个母版页,它使所有的js链接和css链接未实现。谢谢一个控件可以存在于任何子文件夹中,并且可以被许多不同子文件夹中的许多不同页面引用。/在任何情况下都不起作用 因此,您需要解析URL: ResolveUrl("~/images/myimage.jpg") 不,您不必添加runat

我在我的项目中使用了一些相对的url,比如
,但我们的顾问坚持要求我将每个url更改为
~/images/…
,因为它们是html控件,我必须为每个url添加
runat=“server”
标记,所以我的问题是这是否必要?我有两个母版页,它使所有的js链接和css链接未实现。谢谢

一个控件可以存在于任何子文件夹中,并且可以被许多不同子文件夹中的许多不同页面引用<代码>。/在任何情况下都不起作用

因此,您需要解析URL:

ResolveUrl("~/images/myimage.jpg")
不,您不必添加
runat=“server”
,您可以这样做:

<img src="<% =ResolveUrl("~/images/portal_header.jpg") %>" .../>
”../>

这在很大程度上取决于上下文。只要依赖资源的位置不发生变化,使用相对URL就可以正常工作。将所有图像标记转换为控件确实会给您带来使用“~”(应用程序根目录)的好处,但也会增加服务器上的处理开销


您的顾问可能试图保护您免受常见问题的影响。您的所有相关链接在开发过程中都能正常工作(“http://localhost/site)但在进入生产阶段时会中断(“http://www.yourdomain.com/somelocation/”。

不确定您使用的是哪个ASP版本,但我使用的是
@Url.Content(“~/relativepath”)
适用于使用MVC3和剃须刀的ASP4


或者

我建议你向顾问表达你的担忧。如果他们有这样做的理由,他们会让你知道。他们可能只是想选择移动文件而不破坏其中的移动链接。他们应该对你遇到的问题有解决方案。@pita我显然无法访问你的testi历史记录ng等,但我的回答实际上是想向您解释为什么顾问可能会提出这一建议,以及关键区别是什么。两种选择都不是“正确实施的唯一方法”“但根据你的情况,其中一种可能更为正确。祝你好运@pita,顾问正在保护您避免将来的错误。是的,这解决了URL问题,是一个很好的方法。但依我看,这并没有解决我所理解的真正问题“我是否需要以编程方式解析URL@金丹戈-绝对不是。代码审阅者/架构师可以要求所有控件和页面都具有一个层次的深度,然后../images将始终工作。但随着网站的发展,人们的来来往往,需求的变化,这可能不是理想的需求。在代码占用空间很小的时候进行重构要比在代码占用空间很大的时候进行重构要好。我不反对你最后的评论。我个人选择尽可能解析URL,但这只是我的偏好。当然,我使用的是MVC和Razor,所以runat=“server”的这个概念实际上并不相关@金丹戈同意。在某个时刻,有人会把一个页面埋得三层深,然后在上面弹出一个控件,突然,图像找不到了。oops..仅供参考此示例需要MVC和Razor。