为什么 Web Forms for Marketers 不能在我的自定义保存操作中正确填充选定的 DropList 值?

Why doesn't Web Forms for Marketers correctly populate the selected DropList value in my custom save action?

在我的自定义保存操作中,我遍历了表单字段(AdaptedControlResult 对象)。任何作为 DropList 的表单字段(来自任何来源——手动输入的值,或项目查找)正在返回 System.Collections.Generic.List`1[System.String]

的字符串值

现在,重要的是要知道,它没有返回实际的列表。它返回具有该值的 文字字符串

所以,这个调用:

fields.GetEntryByName("MyFieldName").Value

正在返回字符串:System.Collections.Generic.List`1[System.String]。不是下拉列表的值。一个字符串,表示它是 List<string>.

我已确认表单的 HTML 呈现正确。我也手动检查了入站 HttpContext.Current.Request.Form 值...

HttpContext.Current.Request.Form["BGWnjkQqrE6w6sr31IgzrQ.Sections[5].Fields[0].Value"]

这是正确选择的下拉值(Sitecore ID)。

因此,数据正确输出到表单,入站 Request.Form 数据也是正确的。在某处,Sitecore 决定不将所选值填充到 AdaptedControlResult 对象中。

另外奇怪的是,对于 DropList 字段类型,所选值 确实 出现在 Parameters 属性 中(莫名其妙)。我只是检测并使用它,但它不一致——例如,对于文本框字段类型,单词 "multiline" 出现在那里。

所有其他字段类型都可以正常工作 -- 我有几个文本输入字段和一些单选按钮列表。它只是 DropList 字段。

获得这个的技巧是什么?

这是在 MVC 中使用 WFFM 模块时 Sitecore 中的一个已知错误。您可以在此知识库文章中找到更多详细信息 - Incorrect data is saved for list fields in WFFM MVC.

知识库文章中列出了修复程序,具体取决于您使用的 Sitecore 的确切版本。很抱歉只提供了一个 link 的答案,但修复需要多个步骤,修复的下载已附在文章中。