Episerver 中的块

Blocks in Episerver

所以我正在尝试创建我的第一个块。此块的想法是从 api 端点获取最新消息,然后将其显示在网站的不同页面上。

我理解的是这样的

创建一个块类型,像这样

public class NewsBlock : BlockData
{

            [CultureSpecific]
            [Display(
                Name = "Heading",
                Description = "Add a heading.",
                GroupName = SystemTabNames.Content,
                Order = 1)]
            public virtual String Heading { get; set; }

}

然后我为我的块创建一个模型

public class LatestNewsViewModel 
{
  public NewsBlock NewsBlock { get; private set; }
  public IEnumerable<dynamic> LatestNews { get; set; }

  public LatestNewsViewModel(NewsBlock latestNewsBlock, IEnumerable<dynamic> latestNews) 
  {
  NewsBlock = latestNewsBlock;
  LatestNews = latestNews;
}
}

然后我创建一个块控制器并在索引操作中从我的 api 获取数据并填充块容器数据 然后我创建一个局部视图,然后从控制器将数据传递到视图中 然后,我可以在仪表板上将我的块添加到网站上任何我想要的地方

是这样吗?还是我遗漏了什么?

这似乎是正确的。请注意,关于如何通过控制器将数据从内容模型获取到实际视图,有很多方法和意见。下面的例子只是我能想到的最简单的场景。

public class NewsBlock : BlockData
{    
            [CultureSpecific]
            [Display(
                Name = "Heading",
                Description = "Add a heading.",
                GroupName = SystemTabNames.Content,
                Order = 1)]
            public virtual String Heading { get; set; }

}

控制器

public class NewsBlockController : BlockController<NewsBlock>
{
    // GET: NewsBlock
    public override ActionResult Index(NewsBlock currentBlock)
    {
        // apistuff
        ApiModelWhatever returnFromApi = "whatever";

        var model = new LatestNewsViewModel(currentBlock, returnFromApi);
        return PartialView(model);
    }
}

视图模型

public class LatestNewsViewModel 
{
    public string Heading { get; private set; }
    public ApiModelWhatever ReturnFromApi { get; private set; }

    public LatestNewsViewModel(NewsBlock latestNewsBlock, ApiModelWhatever returnFromApi) 
    {
        Heading = latestNewsBlock.Heading;
        ReturnFromApi = returnFromApi;
    }
}

查看

@model LatestNewsViewModel

<h2>@Html.PropertyFor(model => model.Heading)</h2>