我正在使用 EPiServer 7.5+ 并且有一个场景,我的一些本地块在页面编辑窗口中被编辑后没有更新。
我要么必须在编辑受影响的本地块后进行整页刷新,要么使用FullRefreshPropertiesMetaData,无论如何它只会刷新整个页面。
为什么有些本地块没有正确刷新?
经过一番调查,我注意到这个问题只影响具有自己控制器的本地块。
示例代码
页面/块:
[ContentType("nguid")]
public class SimpleLocalBlock : BlockData{
public virtual string Text {get;set;}
}
[ContentType("nguid")]
public class AdvancedLocalBlock : BlockData{
public virtual string Text {get;set;}
}
[ContentType("nguid")]
public class MyPage : PageData
{
public virtual SimpleLocalBlock Simple {get;set;}
public virtual AdvancedLocalBlock Advanced {get;set;}
}
控制器:
public class AdvancedLocalBlockController : BlockController<AdvancedLocalBlock>
{
public override ActionResult Index(MultiLinksBlock currentContent)
{
return PartialView(ViewPath, currentContent);
}
//Use ViewData["Tag"] to decide which View to use
public virtual string ViewPath
{
get
{
var tag =
this.ControllerContext.ParentActionViewContext.ViewData["Tag"]
as AdvancedViews?;
if (tag.HasValue)
{
switch (tag)
{
case AdvancedViews.View1:
return "~/Views/Shared/Blocks/View1.cshtml";
case AdvancedViews.View1:
return "~/Views/Shared/Blocks/View2.cshtml";
}
}
throw new Exception("Invalid Tag.");
}
}
用于控制使用哪个视图的枚举:
public Enum AdvancedViews
{
View1 = 1,
View2 = 2
}
查看 (Razor) - 我的页面
@model MyPage
@Html.PropertyFor(x => x.Simple)
@Html.PropertyFox(x => x.Advanced, new {Tag = AdvancedViews.View1})
查看 (Razor) - SimpleLocalBlock
@model SimpleLocalBlock
@Html.PropertyFor(x => x.Text)
查看(剃刀) - View1
@model AdvancedLocalBlock
@Html.PropertyFor(x => x.Text)
概括
我可以在编辑时使用 On Page Editing,Simple
并且该块将在页面上正确内联刷新(即不需要刷新整个页面)。但是,当我使用“高级”页面编辑时,在刷新整个页面之前我看不到更新。