如何使用Razor从渲染图像URL中删除波浪号(〜)?

时间:2011-12-20 15:39:56

标签: razor umbraco

在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循环中,如果属性有一个,则渲染图像。

2 个答案:

答案 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" />

}