【问题标题】:Unexpected path after tilde (~/) resolution in .cshtml file.cshtml 文件中波浪号 (~/) 解析后的意外路径
【发布时间】:2015-12-22 00:25:14
【问题描述】:

想象一下下面的 cshtml 文件:

<img src="~/img/image.jpg" />

并将其与以下内容进行比较:

<img src="@("~/img/image.jpg")" />

我希望这两种情况下的结果相同,但是,~/ 部分仅在第一种情况下正确解析(到应用程序根目录)。第二个版本以 404 Not Found 结束,因为 src 解析为 http://localhost:50453/~/img/image.jpg

这是错误还是功能?如果它是一个特性,那么它的实现背后的逻辑是什么?

【问题讨论】:

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


    【解决方案1】:

    这是预期的行为。当 razor 看到 ~ 时,它会将其转换为应用程序基础根。但是在您的第二个示例中,您将图像的路径作为字符串(包括~)传递,它将被呈现为字符串本身。

    你应该使用src="~/img/image.jpg"

    【讨论】:

    • 我特别感兴趣,如果有特殊原因,为什么要按原样进行评估。 IE。为什么 razor 首先解析波浪号路径,然后才将 @(...) 呈现到结果页面中。
    • 真的很重要吗? Razor 会立即为您提供浏览器的完整页面。
    • 这很重要(对我来说),这就是我问这个问题的原因。如果我正在构建一些更复杂的src 路径并将它们存储在假设tempVar 中,我只是觉得它相当难看,因为为了达到预期的效果我必须做src="~/@tempVar",即我不能依赖~/如果它是tempVar 的一部分,则正在解决。
    • 不,这不是问题。您可以执行"~/@yourVaribaleName/someImag.jpg",razor 会负责将正确的 ~ 转换为应用程序基本路径。如果您的变量名称中包含 ~,它仍将作为字符串添加。但是为什么你甚至在 temp 变量中有 ~ 。你不应该像内置的~那样。
    • 我有 ~ 在我的临时变量中,因为我期待我原来的问题的第二个版本可以工作:) 因此问题 - 为什么它不起作用。或者换句话说 - 剃刀背后的作者的动机是什么?在我的许多观点中,我只是有一个~/Upload/Product 的“魔术字符串”,因此我决定将它提取到全局可访问的常量中,并通过@ 使用它。但是,之后我的所有图像都无法加载。希望你现在看到我在tempVar 中使用波浪号的动机,以及我对剃刀无法解决它的失望。
    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 2010-12-13
    • 2012-10-10
    • 2019-05-22
    • 1970-01-01
    • 2011-03-30
    • 2014-08-05
    • 2021-10-15
    相关资源
    最近更新 更多