2015-06-10 3 views
0

Я использую действие сохранения Create Item в веб-форме. У меня есть список флажков, указывающий на папку, содержащую элементы категории. Это отображается в поле Multilist в шаблоне элемента, который он будет создавать, когда пользователь отправит форму. Но он передает текст флажка, а не значение, поэтому у мультилиста для каждого созданного нового элемента есть плохие данные. Кто-нибудь знает, как установить список флажков для передачи значений вместо этого? Я немного удивлен, что это делает это в первую очередь.Значения флажков Sitecore WFFM на Create Item

ответ

0

У меня не было возможности проверить это, но теоретически вы можете создать новый тип поля, который наследуется от CheckboxList, и предположим, что мы называем это CheckboxListPipedValues. Код будет выглядеть примерно так:

using System.ComponentModel; 
using System.Linq; 
using System.Text; 
using Sitecore.Form.Core.Controls.Data; 
using Sitecore.Form.Web.UI.Controls; 

public class CheckboxListPipedValues : Sitecore.Form.Web.UI.Controls.CheckboxList 
{ 
    [Browsable(false)] 
    public override ControlResult Result 
    { 
     get 
     { 
      StringBuilder stringBuilder1 = new StringBuilder(); 
      var checkedItems = this.InnerListControl.Items.Where(a => a.Selected).ToList(); 
      var values = string.Join("|", checkedItems.Select(c => c.Value)); 
      foreach (var item in checkedItems) 
      { 
       stringBuilder1.AppendFormat("{0}, ", item.Text); 
      } 
      return new ControlResult(this.ControlName, values, stringBuilder1.ToString(0, (stringBuilder1.Length > 0 ? stringBuilder1.Length - 2 : 0))); 
     } 
    } 
} 

В Sitecore, просто пойти в /sitecore/system/Modules/Web Forms for Marketers/Settings/Field Types/List Types/Checkbox List и дублировать этот элемент. Затем измените сборку и класс на новый элемент управления. Измените форму, чтобы использовать новое поле, и убедитесь, что значения правильно сопоставлены. Теперь вывод значения должен быть списком, разделенным по каналам, которые должны хорошо работать с полем мультилиста.

EDIT: Для MVC, это тот же самый процесс, но вам необходимо обновить MVC Type в элементе типа поле, чтобы указать на новый класс. Код для MVC должен выглядеть примерно так:

using Sitecore.Data; 
using Sitecore.Data.Items; 
using Sitecore.Form.Core.Controls.Data; 
using Sitecore.Forms.Core.Data; 
using Sitecore.Forms.Mvc.Data.TypeConverters; 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Linq; 
using System.Runtime.CompilerServices; 
using System.Text; 
using System.Web.Mvc; 


public class CheckBoxListPipedField : CheckBoxListField 
{ 
    public CheckBoxListPipedField(Item item) : base(item) 
    { 
    } 

    public override ControlResult GetResult() 
    { 
     var values = new List<string>(); 
     StringBuilder stringBuilder1 = new StringBuilder(); 
     if (this.Items != null) 
     { 
      foreach (SelectListItem selectListItem in 
       from item in this.Items 
       where item.Selected 
       select item) 
      { 
       values.Add(selectListItem.Value); 
       stringBuilder1.AppendFormat("{0}, ", selectListItem.Text); 
      } 
     } 
     var results = string.Join("|", values); 
     return new ControlResult(base.ID.ToString(), base.Title, results, stringBuilder1.ToString(0, (stringBuilder1.Length > 0 ? stringBuilder1.Length - 2 : 0))); 
    } 
} 
+0

Спасибо! Я думаю, что это сработает, но я использую MVC, поэтому мне нужно внести некоторые изменения в этот код. У меня возникли проблемы с выбором проверок. Если у вас есть предложения о том, как переписать его для MVC, я был бы признателен! –

+0

@JasonDavidson, я добавил версию MVC. Дайте мне знать, если это сработает для вас. –

+0

Хорошо, почти там. 2 вещи: Sitecore.Forms.Mvc.Data.TypeConverters не существует. Должно ли это быть TypeProviders? И когда я его создаю, я получаю следующую ошибку: Sitecore.Forms.Mvc.Models.Fields.CheckBoxListField не содержит конструктор, который принимает 0 аргументов. –

Смежные вопросы