我使用MVC 5和Razor视图引擎。我想显示其名称保存在数据库中的图像。这是我的查看代码:
<img class="article-image" src="@Url.Content(string.Format("~/Images/Upload/{0}/{1}", Model.FolderName, Model.ImageName))" width="100%" />
这个工作正常,直到我在Model.ImageName中有特殊字符,例如&#39; Untitled#@。png&#39;。我在渲染的html中得到了这个:
<img class="article-image" width="100%" src="/Images/Upload/de7b1f47-c9ec-4521-ae8d-faae518e1144/Untitled#@.png">
如果我使用URL编码作为文件名,图像会正确显示。这是编码版本:
<img class="article-image" width="100%" src="/Images/Upload/de7b1f47-c9ec-4521-ae8d-faae518e1144/Untitled%23%40.png">
我也试过
<img class="article-image" src="@string.Format("~/Images/Upload/{0}/{1}", Model.FolderName, Model.ImageName)" width="100%" />
没有运气。
我在MSDN中发现了 UrlHelper.Content :
如果指定的内容路径不以波浪号(〜)字符开头,则此方法将返回contentPath不变。
我只是想知道为什么 UrlHelper.Content 无法解决我的问题?我不想手动编码我的文件名。
抱歉我的英语不好。
答案 0 :(得分:1)
Url.Content
仅将提供的相对路径映射到包含虚拟目录的相对绝对路径,并且应用程序可能位于此之下。它没有对它提供的相对URL进行任何处理,也没有实际加载任何内容或任何内容:它只返回一个字符串。
如果FolderName
或ImageName
可能包含网址无效的字符,那么您只需使用Url.Encode
对其进行编码:
<img class="article-image" src="@Url.Content(string.Format("~/Images/Upload/{0}/{1}", Url.Encode(Model.FolderName), Url.Encode(Model.ImageName)))" width="100%" />