如何禁用Sitecore WFFM自定义字段缓存

时间:2014-08-19 22:27:02

标签: sitecore sitecore6 web-forms-for-marketers

我在 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显然会清除缓存。

我想知道是否有办法阻止此缓存的发生。

提前致谢!

1 个答案:

答案 0 :(得分:0)

首先,您应该检查以确保在此处找不到缓存的渲染:'/sitecore/layout/Renderings/Modules/Web Forms for Marketers/Form'(我现在打开的WFFM版本不是默认值)。还要检查以确保其中包含的任何渲染也不会被缓存。

查看表单代码,每次都构造表单项和字段容器。我还检查了被调用的.ascx,它没有默认的输出缓存。您可以从课程Sitecore.Forms.Core.dll的{​​{1}}深入查看,但我会先尝试一下。