用波形符 (~) 存储路径并在 razor 中用 html.raw 显示

kmg*_*mgt 2 .net c# asp.net-mvc razor

我有一个 razor 模板 index.cshtml 并希望在变量中存储一些 HTML 标记:

@{
    var markup = @"<img src=""~/images/image.png"">";
}
Run Code Online (Sandbox Code Playgroud)

现在我想通过 @Html.Raw() 在页面上的任何位置显示它。

<div>    
    @Html.Raw(markup)
</div>
Run Code Online (Sandbox Code Playgroud)

波形符 (~) 将按预期显示为字符,而不是根路径。所以客户端将无法加载这个错误的图像源~/images/image.png。

是否有可能获得变量中引用或转换的正确路径,就像直接在该视图模板中写入标记时的行为一样?

pet*_*ids 5

您可以像这样使用Url.Content方法:

var markup = $@"<img src=""{Url.Content("~/images/image.png")}"">";
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢使用string.Format而不是$

var markup = string.Format(@"<img src=""{0}"">", Url.Content("~/images/image.png"));
Run Code Online (Sandbox Code Playgroud)

这会将“~/images/image.png”转换为应用程序绝对路径,因此实际输出将类似于

<img src="/images/image.png">
Run Code Online (Sandbox Code Playgroud)