Уеб формуляри за търговци (WFFM) Визуални полета за персонализиран тип поле не се показват

Използвах следния код, за да добавя две свойства към Form Designer, но те не се показват. Типът поле е подобен на 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