C# episerver7&;Mvc-带控制器(和标签)的本地块-不';t在页内编辑中自动刷新
我使用的是EPiServer 7.5+,有一个场景,我的一些文件在页面编辑窗口中编辑后没有更新 我要么在编辑受影响的本地块后进行整页刷新,要么使用,这只会刷新整页 为什么某些本地块不能正确刷新? 经过调查,我注意到这个问题只影响有自己控制器的本地块 示例代码 页面/块:C# episerver7&;Mvc-带控制器(和标签)的本地块-不';t在页内编辑中自动刷新,c#,asp.net-mvc,razor,episerver,episerver-7,C#,Asp.net Mvc,Razor,Episerver,Episerver 7,我使用的是EPiServer 7.5+,有一个场景,我的一些文件在页面编辑窗口中编辑后没有更新 我要么在编辑受影响的本地块后进行整页刷新,要么使用,这只会刷新整页 为什么某些本地块不能正确刷新? 经过调查,我注意到这个问题只影响有自己控制器的本地块 示例代码 页面/块: [ContentType("nguid")] public class SimpleLocalBlock : BlockData{ public virtual string Text {get;set;} } [Co
[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.");
}
}
var tag =
this.ControllerContext.ParentActionViewContext.ViewData
.ParseEnum<AdvancedViews>("tag");
查看(剃须刀)-MyPage
视图(剃须刀)-SimpleLocalBlock
@model SimpleLocalBlock
@Html.PropertyFor(x => x.Text)
视图(剃须刀)-视图1
摘要
我可以在编辑Simple
时使用页内编辑,块将在页面内联正确刷新(即不需要刷新整个页面)。但是,当我使用“高级”进行页面编辑时,直到刷新整个页面时,我才看到更新。在使用检查EPiServer在页面编辑后所做的操作后,我意识到AdvancedLocalBlockController
引发异常,因为EPi没有正确返回ViewData
My View Dictionary键Tag
的大小写为Tag
,传递的是枚举值(int),而不是枚举实例
我最终创建了一个帮助器来支持EPi:
public static T? ParseEnum<T>(this ViewDataDictionary d, string key)
where T : struct
{
var dictObject = d[key];
if (null == dictObject)
return null;
if (dictObject is T?)
return dictObject as T?;
T parsedEnum;
if (Enum.TryParse(dictObject.ToString(), out parsedEnum))
return parsedEnum;
return null;
}
publicstatict?ParseEnum(此ViewDataDictionary已解析,字符串键)
其中T:struct
{
var dictObject=d[key];
if(null==dictObject)
返回null;
如果(对象是T?)
将dictObject返回为T?;
牙本质;
if(Enum.TryParse(dictObject.ToString(),out parsedEnum))
回归分析;
返回null;
}
然后更新了我的控制器:
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.");
}
}
var tag =
this.ControllerContext.ParentActionViewContext.ViewData
.ParseEnum<AdvancedViews>("tag");
var标记=
this.ControllerContext.ParentActionViewContext.ViewData
.ParseEnum(“标签”);
之后,我的AdvancedLocalBlock
在EPi页面编辑中表现正确
var tag =
this.ControllerContext.ParentActionViewContext.ViewData
.ParseEnum<AdvancedViews>("tag");