在Umbraco(4.7.0)中,我使用一个小的Razor脚本来渲染图像属性的图像,但即使这种方法接收到正确的信息,图像也不会显示;始终在URL前面生成波浪号,但这实际上是停止显示图像。有没有办法(或者可能是完全渲染媒体的另一种方法)去掉波浪号?
这基本上是剃刀脚本中的内容,其中primaryImage是image属性:
<img class="primary-image" src="@Model.MediaById(Model.primaryImage).umbracoFile" alt="@Model.MediaById(Model.primaryImage).Name">
这个片段实际上位于foreach循环中,如果属性有一个,则渲染图像。
答案 0 :(得分:4)
假设生成~/Path/To/Image.jpg
的代码是:
@Model.MediaById(Model.primaryImage).umbracoFile
您可以将结果包装到Url.Content
的调用中,这会将结果转换为站点相对路径。例如:
@* Assuming that Model.MediaById(Model.primaryImage).umbracoFile results in
A string similar to ~/images/foo.jpg, the following will work: *@
<img src="@Url.Content(Model.MediaById(Model.primaryImage).umbracoFile)" ... />
但是,我建议减少对MediaById
的调用并存储结果(同时检查空引用 - 以防万一),例如:
@{
var media = Model.MediaById(Model.primaryImage);
if (media != null){
<img src="@Url.Content(media.umbracoFile)" ... />
}
}
答案 1 :(得分:0)
如果您使用了代码块,则可以将媒体图像作为DynamicMedia对象获取,如下所示(尚未测试) - 媒体对象的NiceUrl属性也将是非代码网址:
if(Model.HasProperty("primaryImage") && !String.IsNullOrEmpty(Model.primaryImage.ToString()))
{
int mediaId = Convert.ToInt32(Model.getProperty("primaryImage").Value.ToString());
var mediaNode = new umbraco.cms.businesslogic.media.Media(mediaId);
string mediaUrl = mediaNode.getProperty("umbracoFile").Value.ToString();
string mediaName = mediaNode.Text;
<img src="@mediaUrl" alt="@mediaName" />
}
修改强>
尝试了与您的代码非常相似的内容并且工作正常,因此可能是配置问题:
@{
var articleFirst = Model.umbNewsArticle.Take(1);
var article1 = articleFirst.FirstOrDefault();
<img src="@article1.MediaById(article1.feature1Image).umbracoFile" alt="@article1.MediaById(article1.feature1Image).Text" height="63" width="78" />
}