【问题标题】:How to specify virtual path for image in ASP.Net MVC razor helper如何在 ASP.Net MVC 剃须刀助手中指定图像的虚拟路径
【发布时间】:2012-04-09 12:41:41
【问题描述】:

在我的 razor style helper 类(位于 App_Code 文件夹中,我有这行代码:

<img src="../../Content/images/ajax_activity.gif" alt="loading"/>

这在 Cassini 中运行良好,但是当我将应用程序部署到 IIS(虚拟目录)时,IIS 找不到路径。虚拟路径被忽略。 这也不起作用:

<img src="@Href("~/Content/images/ajax_activity.gif")" alt="loading" />

【问题讨论】:

  • 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 目录中有关(需要它们在那里,因为我从多个视图中调用它们)。
  • 太好了,它就在那里,它返回以下内容:

标签: asp.net html css asp.net-mvc razor


【解决方案1】:

我知道这是一篇旧帖子,但我需要的信息在这里。

对我来说,缺少的部分是“发布时”。因此,对于任何寻找如何使用 Web 配置转换的未来开发人员,我遵循的过程是:

  1. 为每个项目配置(即部署)添加一个转换文件

  2. 添加环境特定元素(不要忘记 xdt 属性)

  3. 为您的本地开发修改 Web.config。

项目一发布,就会发生转化。

【讨论】:

    【解决方案2】:

    您可以使用@Url.Content 方法将虚拟相对路径转换为绝对应用程序路径,如下所示:

    <img src=@Url.Content("~/images/picture.png") alt="picture description">
    

    它会转换成这个HTML代码转发给客户端:

    <img src="/appname/images/picture.png" alt="picture description">
    

    更新: 另一方面,您可以将图像转换为 base64,它也会正确显示:

    <img src="data:image/png;base64,iVBORw0KG...SuQmCC" alt="picture description">
    

    【讨论】:

      【解决方案3】:

      当您在 IIS 的虚拟目录中部署时,应用根目录可能与您在开发环境中的不同。

      如果您的应用网址类似于

      http://localhost/MyWebApp/
      

      ASP.NET 会认为根是“localhost”,而它应该是“MyWebApp”。

      要解决这个问题,您必须将虚拟目录转换为应用程序:在 IIS 管理器中,找到您的目录,右键单击它,然后“转换为应用程序”。

      【讨论】:

        【解决方案4】:

        好的,解决了,但我不确定它为什么会起作用。在尝试了以下所有组合均未成功后:

        <img src="../Content/images/ajax_activity.gif" alt="loading"/>
        <img src="/Content/images/ajax_activity.gif" alt="loading"/>
        <img src="~/Content/images/ajax_activity.gif" alt="loading"/>
        <img src="Content/images/ajax_activity.gif" alt="loading"/>
        

        以下终于按预期工作了

        <img src="./Content/images/ajax_activity.gif" alt="loading"/>
        

        它正确返回了带有虚拟目录集的图像路径。谁能解释一下?

        【讨论】:

        • 延迟回复,但./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")" alt="loading" />
        

        【讨论】:

        • 这会导致以下编译器错误:CS0103: The name 'Url' does not exist in the current context
        • 这对我有用。可能更适用于更广泛的环境。
        猜你喜欢
        • 2018-08-12
        • 2018-05-19
        • 1970-01-01
        • 2011-05-07
        • 1970-01-01
        • 1970-01-01
        • 2015-08-01
        • 2016-01-17
        • 2012-05-16
        相关资源
        最近更新 更多