Episerver中的块

moh*_*317 1 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; }

}
Run Code Online (Sandbox Code Playgroud)

然后我为我的Block创建了一个模型

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;
}
}
Run Code Online (Sandbox Code Playgroud)

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

这是这样做的吗?或者我错过了什么?

Eri*_*itz 6

这似乎是正确的.请注意,有关如何通过控制器将内容模型中的数据提供给实际视图的方法和意见.以下示例只是我能想到的最简单的场景.

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

}
Run Code Online (Sandbox Code Playgroud)

控制器

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

视图模型

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

视图

@model LatestNewsViewModel

<h2>@Html.PropertyFor(model => model.Heading)</h2>
Run Code Online (Sandbox Code Playgroud)