我在 Sitecore WFFM 中有一个自定义字段SomeCustomFieldType
,它在表单编辑器的左侧显示了一个属性,该属性是一个带有选项列表的下拉列表。
[VisualProperty("Choose value", 99),
VisualCategory("Custom Properties"),
VisualFieldType(typeof(CountryBasedListChoiceField))]
public string ChosenValue { get; set; }
我没有使用开箱即用的ListChoiceField
,而是编写了自己的CountryBasedListChoiceField
,根据某些条件,确定了需要在属性下拉列表中显示哪些选项:
public CountryBasedListChoiceField()
: base(((object) HtmlTextWriterTag.Select).ToString())
{
string formID = Sitecore.Context.Request.GetQueryString("formid");
Language formLanguage = Language.Parse(Sitecore.Context.Request.GetQueryString("la"));
Item formItem = Sitecore.Context.ContentDatabase.GetItem(formID, formLanguage);
string countryName = SitecoreUtility.GetCurrentCountryISOCode(formItem, formLanguage);
string choicesRootPath = CountryConfigurationManager.GetCountrySite(countryName).Metadata.FormsStylesheetsItemPath;
Item choicesRootItem = Sitecore.Context.ContentDatabase.GetItem(choicesRootPath, formLanguage);
ChoicesRoot = choicesRootItem.ID.ToString();
}
上述代码的工作方式并不重要,因为它的工作正常。
我遇到的问题是上面的代码只执行 ,这是用户第一次在表单编辑器中打开表单并单击类型为{{ 1}}。
之后,必须缓存要显示的选项列表,因为此代码永远不会被命中。即使关闭浏览器并重新打开它也不足以清除缓存 - iisreset显然会清除缓存。
我想知道是否有办法阻止此缓存的发生。
提前致谢!
答案 0 :(得分:0)
首先,您应该检查以确保在此处找不到缓存的渲染:'/sitecore/layout/Renderings/Modules/Web Forms for Marketers/Form'
(我现在打开的WFFM版本不是默认值)。还要检查以确保其中包含的任何渲染也不会被缓存。
查看表单代码,每次都构造表单项和字段容器。我还检查了被调用的.ascx,它没有默认的输出缓存。您可以从课程Sitecore.Forms.Core.dll
的{{1}}深入查看,但我会先尝试一下。