如何在 ASP.Net MVC 剃须刀助手中指定图像的虚拟路径
Posted
技术标签:
【中文标题】如何在 ASP.Net MVC 剃须刀助手中指定图像的虚拟路径【英文标题】:How to specify virtual path for image in ASP.Net MVC razor helper 【发布时间】:2012-04-09 12:41:41 【问题描述】:在我的 razor style helper 类(位于 App_Code 文件夹中,我有这行代码:
<img src="../../Content/images/ajax_activity.gif" />
这在 Cassini 中运行良好,但是当我将应用程序部署到 IIS(虚拟目录)时,IIS 找不到路径。虚拟路径被忽略。 这也不起作用:
<img src="@Href("~/Content/images/ajax_activity.gif")" />
【问题讨论】:
This also doesn't work
... 为什么不呢?请向我们展示生成的 html。
嗨 SLaks。由于这是 jQuery 对话框中的 ajax 调用,因此无法(至少我不知道)查看生成的源代码,但在 Firebug 中查看它,我收到以下错误消息:“NetworkError: 404 Not找到 - localhost/Content/images/ajax_activity.gif"。我已经将虚拟目录设置为 Merkur,所以真实路径应该是localhost/Merkur/Content/images/ajax_activity.gif。
还有一件事。当从视图中调用时,上面的两个示例都可以正常工作。问题似乎与帮助程序位于 App_Code 目录中有关(需要它们在那里,因为我从多个视图中调用它们)。
太好了,它就在那里,它返回以下内容:
【参考方案1】:
我知道这是一篇旧帖子,但我需要的信息在这里。
对我来说,缺少的部分是“发布时”。因此,对于任何寻找如何使用 Web 配置转换的未来开发人员,我遵循的过程是:
为每个项目配置(即部署)添加一个转换文件
添加环境特定元素(不要忘记 xdt 属性)
为您的本地开发修改 Web.config。
项目一发布,就会发生转化。
【讨论】:
【参考方案2】:您可以使用@Url.Content
方法将虚拟相对路径转换为绝对应用程序路径,如下所示:
<img src=@Url.Content("~/images/picture.png") >
它会转换成这个HTML代码转发给客户端:
<img src="/appname/images/picture.png" >
更新: 另一方面,您可以将图像转换为 base64,它也会正确显示:
<img src="data:image/png;base64,iVBORw0KG...SuQmCC" >
【讨论】:
【参考方案3】:当您在 IIS 的虚拟目录中部署时,应用根目录可能与您在开发环境中的不同。
如果您的应用网址类似于
http://localhost/MyWebApp/
ASP.NET 会认为根是“localhost”,而它应该是“MyWebApp”。
要解决这个问题,您必须将虚拟目录转换为应用程序:在 IIS 管理器中,找到您的目录,右键单击它,然后“转换为应用程序”。
【讨论】:
【参考方案4】:好的,解决了,但我不确定它为什么会起作用。在尝试了以下所有组合均未成功后:
<img src="../Content/images/ajax_activity.gif" />
<img src="/Content/images/ajax_activity.gif" />
<img src="~/Content/images/ajax_activity.gif" />
<img src="Content/images/ajax_activity.gif" />
以下终于按预期工作了
<img src="./Content/images/ajax_activity.gif" />
它正确返回了带有虚拟目录集的图像路径。谁能解释一下?
【讨论】:
延迟回复,但./Stuff/foo.bar
将在应用程序的基本目录中查找Stuff/foo.bar
。 ~/Stuff/foo.bar
对应于您可能未配置的虚拟路径。 ../Stuff/foo.bar
是在父目录中查找 Stuff/foo.bar
的相对路径。 Stuff/foo.bar
查看当前目录,/Stuff/foo.bar
.. 好吧,我无法解释那个。我本来希望那个人也可以查看基本目录。在尝试修复类似的解决方案时偶然发现了这一点。关键是这些都可能不同,这就是它可能不起作用的原因。
Stuff/foo.bar 不会是当前目录中的“Stuff 子目录”吗?
是的,抱歉,我的意思是Stuff/foo.bar
会在当前目录中查找Stuff/foo.bar
【参考方案5】:
试试这个:
<img src="@Url.Content("~/Content/images/ajax_activity.gif")" />
【讨论】:
这会导致以下编译器错误:CS0103: The name 'Url' does not exist in the current context 这对我有用。可能更适用于更广泛的环境。以上是关于如何在 ASP.Net MVC 剃须刀助手中指定图像的虚拟路径的主要内容,如果未能解决你的问题,请参考以下文章
asp.net mvc 3 剃须刀。导航以查看表格 tr 点击
如何将两个数组作为 POST 请求参数从 AJAX 发送到 MVC 控制器(ASP .NET Core 3.1 剃须刀)?