【问题标题】:Get media url in View in Sitecore MVC在 Sitecore MVC 的视图中获取媒体 url
【发布时间】:2014-07-18 15:38:44
【问题描述】:

我有一个存储在媒体库中的 mp3 文件。它在项目的媒体字段中被引用。我可以通过在 webforms 或类中执行 Sitecore.Resources.Media.MediaManager.GetMediaURL() 来获取 URL。但是如何在 MVC 视图中实现这一点?当我转储该字段时,它只会呈现一个 html 标记。我只想提取网址。

另外,有没有类似的参考资料?

谢谢

【问题讨论】:

    标签: asp.net-mvc url sitecore media


    【解决方案1】:

    您可以编写一个扩展方法来获取媒体项 URL。这样的事情会起作用(你应该添加空引用检查):

    public static string GetMediaUrl(this Sitecore.Mvc.Helpers.SitecoreHelper sitecoreHelper, string fieldName)
    {
        return GetMediaUrl(sitecoreHelper, fieldName, sitecoreHelper.CurrentItem);
    }
    
    public static string GetMediaUrl(this Sitecore.Mvc.Helpers.SitecoreHelper sitecoreHelper, string fieldName, Item item)
    {
        ImageField imageField = item.Fields[fieldName];
        return Sitecore.Resources.Media.MediaManager.GetMediaUrl(imageField.MediaItem);
    }
    

    然后您可以在您的 cshtml 文件中使用:

    <a href="@Html.Sitecore().GetMediaUrl("YourMediaField")">Click Here</a>
    

    【讨论】:

    • 现在这是我可以落后的。可重用性。
    • @Gabbar 请注意,SitecoreHelper 未在 GetMediaUrl 中使用,但在消费者看来却是这样。这可能会造成未来的混乱。
    • GetMediaUrl 去哪儿了?
    • 我不得不稍微更改您的代码:ImageField imageField = item.Fields[fieldName]; return Sitecore.Resources.Media.MediaManager.GetMediaUrl(imageField.MediaItem);
    • MediaItem mediaItem = item.Fields[fieldName].Item; 应该返回原始项目。我认为你必须在这里使用Sitecore.Data.Fields.ImageField
    【解决方案2】:

    您必须向它提供您从控制器发送回视图的模型:

    类似:

    型号:

    public class c1
    {
    
    public string mediaUrl{ get {return Sitecore.Resources.Media.MediaManager.GetMediaURL();}
    
    }
    

    控制器:

    ActionResult View1()
    {
    //prepare you View Values
    return View(c1);
    }
    

    查看:

    //the required field should look like this
    
    <a href='@Html.Raw(Json.Encode(Model.mediaUrl))'> Link to File </a>
    

    问候

    【讨论】:

    • 自定义模型是唯一的方法吗? Sitecore MVC 的 Razor 语法知识库不是很好。
    • 我不知道这是否是最好的方法,但我从事 MVC 已有 4 年了,这一直是我使用的方法,而且您可以通过松散耦合的视图更好地控制它.
    【解决方案3】:

    FieldRenderer 一起使用时,您需要先使用HtmlString 解析Media 或Field 的Raw 值,然后才能在Rendering 中使用它。

    尽管如果您可以提供更多代码,那么可以更准确地回答它,因为在 Sitecore 中,您可以使用多种方式(Sitecore ORM 和/或 API)来呈现项目字段。

    另请参阅 GitHub 上的 Sitecore MVC project 以及 YouTube 上列出的 Sitecore MVC 视频,从长远来看,它可能会有所帮助。

    1. Sitecore MVC - Getting Started (Part 1)
    2. Sitecore MVC -- View Renderings, @Html.Sitecore(), and Custom Models (Part 2)

    Martina 的 blog articles 很少,它们是 Sitecore MVC 部分的好资源。

    我希望这会有所帮助。

    请问还有什么问题。

    【讨论】:

      猜你喜欢
      • 2022-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      相关资源
      最近更新 更多