Веб-формы для маркетологов (WFFM) Визуальные поля для пользовательского типа поля не отображаются

Я использовал следующий код, чтобы добавить два свойства в конструктор форм, но они не будут отображаться. Тип поля похож на Sitecore.Form.Web.UI.Controls.CheckboxList, и мне нужно, чтобы он отображал те же свойства. К сожалению, я не могу войти в этот код, и модуль не выдает никаких ошибок, поэтому я чувствую, что упускаю что-то простое.

public class CheckBoxListPipedField : Sitecore.Forms.Mvc.Models.Fields.CheckBoxListField
{
    [VisualCategory("List")]
    [VisualFieldType(typeof(Sitecore.Form.Core.Visual.ListField))]
    [VisualProperty("Items:", 100)]
    public ListItemCollection ListItems { get; set; }
    [VisualCategory("List")]
    [VisualFieldType(typeof(MultipleSelectedValueField))]
    [VisualProperty("Selected Value:", 200)]
    public ListItemCollection SelectedValue { get; set; }

    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)));
    }

} 

person Jason Davidson    schedule 11.06.2015    source источник
comment
Вы пытались наследовать от Sitecore.Form.Web.UI.Controls.CheckboxList, а не от Sitecore.Forms.Mvc.Models.Fields.CheckBoxListField?.   -  person Ian Graham    schedule 12.06.2015


Ответы (2)


Не уверен, почему они не будут отображаться, поскольку код по умолчанию для CheckboxListField не имеет их, но попробуйте:

[TypeConverter(typeof(ListSelectItemsConverter))]
public override List<SelectListItem> Items
{
    get
    {
        return base.Items;
    }
    set
    {
        base.Items = value;
        if (this.Items != null)
        {
            this.Value = (
                from x in this.Items
                where x.Selected
                select x.Value).ToList<string>();
        }
    }
}

[ParameterName("selectedvalue")]
[PropertyBinder(typeof(ListFieldValueBinder))]
[TypeConverter(typeof(ListItemsConverter))]
public override object Value
{
    get;
    set;
}

Возможно, вы сможете просто установить для них значение get { return base.Column } и т. д., но вот как это выглядит в базовом классе.

[DefaultValue(1)]
public int Columns
{
    get;
    set;
}

[TypeConverter(typeof(StringToDirection))]
public Direction Direction
{
    get;
    set;
}

public int Rows
{
    get
    {
        if (this.Items.IsNullOrEmpty<SelectListItem>())
        {
            return 1;
        }
        int num = (this.Columns == 0 ? 1 : this.Columns);
        if (this.Items.Count % num <= 0)
        {
            return this.Items.Count / num;
        }
        return this.Items.Count / num + 1;
    }
}
person Amir Setoudeh    schedule 12.06.2015

В рассматриваемом коде не было ничего плохого. Я забыл добавить сборку и класс в новый тип поля и установил только тип MVC.

person Jason Davidson    schedule 12.06.2015