[英]Razor with Url.Content helper is ending quotes at space in URL
我将ASP.NET Core 2与Razor结合使用,以尝试通过ViewModel将图像URL传递到View中。 不幸的是,图像URL中有空格,目前我无法控制。
我有一个这样的文件名(注意空格):
https://example.com/images/file name.jpg
我正在使用Razor尝试显示如下图像:
<img src=@item.ImageUrl />
输出的HTML看起来像这样:
<img src="https://example.com/images/file" name.jpg />
显然这不会做! 我应该提到,当我们使用文件名中没有空格的图像时,这一切都知道。 这是我尝试解决此问题的一些方法:
在Razor中使用Url.Content
帮助程序(这没有什么不同):
<img src=@Url.Content(item.ImageUrl) />
在填充ViewModel时使用System.Web.HttpUtility.UrlEncode
(这会导致“双重编码”错误):
myViewModel.ImageUrl = HttpUtility.UrlEncode(someUrl);
我的目标是使URL正确编码(在输入字符串的空格中没有“ double-encoding”并且不被截断)。 我怎样才能实现这个目标?
问题是Razor会尝试创建有效的HTML,因此当看到空格时,它将自动关闭引号,因此:
@{string img = "a a.jpg";}
<img src=@img />
获取呈现为
<img src="a "a.jpg /> // of course invalid
因此,您需要确保添加引号,然后Razor会使用它们:
<img src="@img" />
哪个被渲染为
<img src="a a.jpg" />
你可以试试
<img src="@Html.Raw(item.ImageUrl)" />
但我同意,从长远来看,使用无效的URL(带空格)似乎不太有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.