+1-888-365-2779
Try Now
More in this section

Forums / Bugs & Issues / Sitefinity - Field Widget Control

Sitefinity - Field Widget Control

2 posts, 0 answered
  1. aloy
    aloy avatar
    2 posts
    Registered:
    24 Nov 2014
    08 Dec 2014
    Link to this post

    Hi All,

    I have created one sitefinity field widget control and registered in my module.  I am populating one dropdown list based on the selection of my field widget control. This functionality is working fine. But when i entered the data in module and trying to save the data at that time custom field control data and its dependent dropdown data is not saving in the database. I have given the code base of my control. Please check and let me know the issue. its very urgent. 

    ascx file,

    <%@ Control %>
    <script type="text/javascript">

        $(document).ready(function () {
            //debugger;
            if ($("#contentViewInsertDialog_ctl00_ctl00_contentView_productBackendInsertView_ctl00_ctl00_sections_c5953212edc6a748d14Ff0000faaefa_0_ctl00_0_ctl00_0_fields_0_typeControl_3_ctl00_3_ctl00_3_dropDown_3").length) {
                $('#contentViewInsertDialog_ctl00_ctl00_contentView_productBackendInsertView_ctl00_ctl00_sections_c5953212edc6a748d14Ff0000faaefa_0_ctl00_0_ctl00_0_fields_0_typeControl_3_ctl00_3_ctl00_3_dropDown_3').empty();
            }
            else {
                $('#contentViewEditDialog_ctl00_ctl00_contentView_productBackendEditView_ctl00_ctl00_sections_c5953212edc6a748d14Ff0000faaefa_0_ctl00_0_ctl00_0_fields_0_typeControl_3_ctl00_3_ctl00_3_dropDown_3').empty();
            }
            //contentViewEditDialog$ctl00$ctl00$contentView$productBackendEditView$ctl00$ctl00$sections$ctl00$c5953212edc6a748d14Ff0000faaefa$ctl00$ctl00$fields$ctl03$CategoryControl$ctl00$ctl00$ddlCategory
            //contentViewInsertDialog$ctl00$ctl00$contentView$productBackendInsertView$ctl00$ctl00$sections$ctl00$c5953212edc6a748d14Ff0000faaefa$ctl00$ctl00$fields$ctl03$CategoryControl$ctl00$ctl00$ddlCategory
        });
        function CallService() {
            //debugger;        
            var ddlCategory = $("#<%=ddlCategory.ClientID%>").val();
            alert('working');
            $.ajax({
                type: "POST",
                url: '/sitefinity/public/services/QuakerOats/ProductService.asmx/GetTypeDetails',
                data: "{'CategoryGUID':'" + ddlCategory + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    if ($("#contentViewInsertDialog_ctl00_ctl00_contentView_productBackendInsertView_ctl00_ctl00_sections_c5953212edc6a748d14Ff0000faaefa_0_ctl00_0_ctl00_0_fields_0_typeControl_3_ctl00_3_ctl00_3_dropDown_3").length) {
                        $('#contentViewInsertDialog_ctl00_ctl00_contentView_productBackendInsertView_ctl00_ctl00_sections_c5953212edc6a748d14Ff0000faaefa_0_ctl00_0_ctl00_0_fields_0_typeControl_3_ctl00_3_ctl00_3_dropDown_3').html(msg.d);
                    }
                    else {
                        $('#contentViewEditDialog_ctl00_ctl00_contentView_productBackendEditView_ctl00_ctl00_sections_c5953212edc6a748d14Ff0000faaefa_0_ctl00_0_ctl00_0_fields_0_typeControl_3_ctl00_3_ctl00_3_dropDown_3').html(msg.d);
                    }
                    //$('#contentViewInsertDialog_ctl00_ctl00_contentView_productBackendInsertView_ctl00_ctl00_sections_c5953212edc6a748d14Ff0000faaefa_0_ctl00_0_ctl00_0_fields_0_typeControl_3_ctl00_3_ctl00_3_dropDown_3').html(msg.d);
                    //$('#contentViewEditDialog_ctl00_ctl00_contentView_productBackendInsertView_ctl00_ctl00_sections_c5953212edc6a748d14Ff0000faaefa_0_ctl00_0_ctl00_0_fields_0_typeControl_3_ctl00_3_ctl00_3_dropDown_3').html(msg.d);
                },
                error: function (e) {
                    alert('Error');
                }
            });
        }
    </script>

    <table>
        <tr>
            <td>
                <asp:Label ID="lblCategory" runat="server" Text="Category" Font-Bold="true"></asp:Label></td>
        </tr>
        <tr>
            <td>
                <asp:DropDownList ID="ddlCategory" runat="server" Width="150px" onchange="CallService();"></asp:DropDownList>
            </td>
        </tr>
    </table>
    .cs file

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Telerik.Sitefinity.Utilities.TypeConverters;
    using Telerik.Sitefinity.Web.UI;
    using Telerik.Sitefinity.Web.UI.Fields;
    using Telerik.Sitefinity.Web.UI.Fields.Contracts;
    using Telerik.Sitefinity;
    using Telerik.Sitefinity.Taxonomies;
    using Telerik.Sitefinity.Taxonomies.Model;

    namespace SitefinityWebApp.UserControls.ProductModule.CategoryFieldWidgetControl
    {
        /// <summary>
        /// A simple field control used to save a string value.
        /// Use the path to this class when you add the field control
        /// SitefinityWebApp.UserControls.ProductModule.CategoryFieldWidgetControl.CategoryTypeSelector
        /// </summary>
        [FieldDefinitionElement(typeof(CategoryTypeSelectorDefinitionElement))]
        public class CategoryTypeSelector : FieldControl
        {
            #region Constructors
            /// <summary>
            /// Initializes a new instance of the <see cref="CategoryTypeSelector" /> class.
            /// </summary>
            public CategoryTypeSelector()
            {
            }
            #endregion

            #region Properties
            //protected override WebControl TitleControl
            //{
            //    get
            //    {
            //        return this.TitleLabel;
            //    }
            //}

            //protected override WebControl DescriptionControl
            //{
            //    get
            //    {
            //        return this.DescriptionLabel;
            //    }
            //}

            //protected override WebControl ExampleControl
            //{
            //    get
            //    {
            //        return this.ExampleLabel;
            //    }
            //}

            /// <summary>
            /// Obsolete. Use LayoutTemplatePath instead.
            /// </summary>
            protected override string LayoutTemplateName
            {
                get
                {
                    return string.Empty;
                }
            }

            /// <summary>
            /// Gets the layout template's relative or virtual path.
            /// </summary>
            public override string LayoutTemplatePath
            {
                get
                {
                    if (string.IsNullOrEmpty(base.LayoutTemplatePath))
                        return CategoryTypeSelector.layoutTemplatePath;
                    return base.LayoutTemplatePath;
                }
                set
                {
                    base.LayoutTemplatePath = value;
                }
            }

            /// <summary>
            /// Gets the reference to the label control that represents the title of the field control.
            /// </summary>
            /// <remarks>
            /// This control is mandatory only in write mode.
            /// </remarks>
            //protected internal virtual Label TitleLabel
            //{
            //    get
            //    {
            //        return this.Container.GetControl<Label>("titleLabel", true);
            //    }
            //}

            /// <summary>
            /// Gets the reference to the label control that represents the description of the field control.
            /// </summary>
            /// <remarks>
            /// This control is mandatory only in write mode.
            /// </remarks>
            //protected internal virtual Label DescriptionLabel
            //{
            //    get
            //    {
            //        return Container.GetControl<Label>("descriptionLabel", true);
            //    }
            //}

            /// <summary>
            /// Gets the reference to the label control that displays the example for this
            /// field control.
            /// </summary>
            /// <remarks>
            /// This control is mandatory only in the write mode.
            /// </remarks>
            //protected internal virtual Label ExampleLabel
            //{
            //    get
            //    {
            //        return this.Container.GetControl<Label>("exampleLabel", true);
            //    }
            //}

            /// <summary>
            /// Gets the text box control.
            /// </summary>
            /// <value>The text box control.</value>
            //protected virtual TextBox TextBoxControl
            //{
            //    get
            //    {
            //        return this.Container.GetControl<TextBox>("fieldBox", true);
            //    }
            //}
            protected internal virtual Label CategoryLabel
            {
                get
                {
                    return this.Container.GetControl<Label>("lblCategory", true);
                }
            }

            protected virtual DropDownList DdlCategoryControl
            {
                get
                {
                    return this.Container.GetControl<DropDownList>("ddlCategory", true);
                }
            }
            //[TypeConverter(typeof(ObjectStringConverter))]
            //public override object Value
            //{
            //    get
            //    {
            //        return this.TextBoxControl.Text;
            //    }
            //    set
            //    {
            //        this.TextBoxControl.Text = value as string;
            //    }
            //}
            [TypeConverter(typeof(ObjectStringConverter))]
            public override object Value
            {
                get
                {
                    return this.DdlCategoryControl.SelectedValue;
                }
                set
                {
                    if (value != null)
                        this.DdlCategoryControl.SelectedValue = string.Empty;
                }
            }
            public string CategoryName { get; set; }
            #endregion

            #region Methods
            protected override void InitializeControls(GenericContainer container)
            {
                //this.TitleLabel.Text = this.Title;
                //this.ExampleLabel.Text = this.Example;
                //this.DescriptionLabel.Text = this.Description;

                //this.TextBoxControl.Text = this.Text;
                BindCategory();

                //Set any existing value, if there is an exception - set the default value
                try
                {
                    this.DdlCategoryControl.SelectedValue = this.CategoryName;
                }
                catch
                {
                    //set the default value
                    this.DdlCategoryControl.SelectedIndex = 1;
                }
            }
            private void BindCategory()
            {
                try
                {
                    TaxonomyManager manager = TaxonomyManager.GetManager();
                    var taxonomy = manager.GetTaxonomies<HierarchicalTaxonomy>().Where(t => t.Name == "Categories").SingleOrDefault();
                    var intlRegion = taxonomy.Taxa.Where(t => t.Title == "All Product Category ").SingleOrDefault();
                    if (intlRegion != null)
                    {
                        foreach (HierarchicalTaxon taxon in ((HierarchicalTaxon)intlRegion).Subtaxa.OrderBy(t => t.Title))
                        {
                            var li = new ListItem(taxon.Title, Convert.ToString(taxon.Id));
                            DdlCategoryControl.Items.Add(li);
                        }
                        DdlCategoryControl.Items.Insert(0, new ListItem("--Select--", "0"));
                        DdlCategoryControl.Items.FindByText("--Select--").Selected = true;
                    }
                }
                catch (Exception exc)
                {

                }
            }
            public override IEnumerable<ScriptDescriptor> GetScriptDescriptors()
            {
                List<ScriptDescriptor> descriptors = new List<ScriptDescriptor>();

                if (base.GetScriptDescriptors() != null)
                {
                    ScriptControlDescriptor descriptor = base.GetScriptDescriptors().Last() as ScriptControlDescriptor;

                    if (this.DdlCategoryControl != null)
                    {
                        //descriptor.AddElementProperty("ddlCategory", this.DdlCategoryControl.ClientID);
                        descriptor.AddElementProperty("ddlCategoryList", this.DdlCategoryControl.ClientID);
                    }              
                    descriptors.Add(descriptor);
                }

                return descriptors.ToArray();
            }

            public override IEnumerable<ScriptReference> GetScriptReferences()
            {
                List<ScriptReference> scripts = new List<ScriptReference>(base.GetScriptReferences());

                scripts.Add(new ScriptReference(CategoryTypeSelector.ScriptReference));

                return scripts;
            }

            public override void Configure(IFieldDefinition definition)
            {
                base.Configure(definition);

                ICategoryTypeSelectorDefinition fieldDefinition = definition as ICategoryTypeSelectorDefinition;

                if (fieldDefinition != null)
                {
                    if (!string.IsNullOrEmpty(fieldDefinition.CategoryName))
                    {
                        this.CategoryName = fieldDefinition.CategoryName;
                    }
                }
            }
            #endregion

            #region Private members
            public static readonly string layoutTemplatePath = "~/UserControls/ProductModule/CategoryFieldWidgetControl/CategoryTypeSelector.ascx";
            public static readonly string ScriptReference = "~/UserControls/ProductModule/CategoryFieldWidgetControl/CategoryTypeSelector.js";
            #endregion
        }
    }
    .js file 

    Type.registerNamespace("SitefinityWebApp.UserControls.ProductModule.CategoryFieldWidgetControl");

    SitefinityWebApp.UserControls.ProductModule.CategoryFieldWidgetControl.CategoryTypeSelector = function (element) {
        SitefinityWebApp.UserControls.ProductModule.CategoryFieldWidgetControl.CategoryTypeSelector.initializeBase(this, [element]);
        this._element = element;
        this._labelElement = null;
        //this._textBoxElement = null;
        this._ddlCategoryList = null;
    }

    SitefinityWebApp.UserControls.ProductModule.CategoryFieldWidgetControl.CategoryTypeSelector.prototype = {
        initialize: function () {
            /* Here you can attach to events or do other initialization */
            SitefinityWebApp.UserControls.ProductModule.CategoryFieldWidgetControl.CategoryTypeSelector.callBaseMethod(this, "initialize");
        },

        dispose: function () {
            /*  this is the place to unbind/dispose the event handlers created in the initialize method */
            SitefinityWebApp.UserControls.ProductModule.CategoryFieldWidgetControl.CategoryTypeSelector.callBaseMethod(this, "dispose");
        },

        /* --------------------------------- public methods ---------------------------------- */

        /* --------------------------------- event handlers ---------------------------------- */

        /* --------------------------------- private methods --------------------------------- */

        //_getTextValue: function () {
        //    if (this._textBoxElement) {
        //        return this._textBoxElement.value;
        //    }
        //    return null;
        //},

        //_clearTextBox: function () {
        //    if (this._textBoxElement != null) {
        //        this._textBoxElement.value = "";
        //    }
        //},
        _getDropDownValue: function () {
            if (this._ddlCategoryList) {            
                return this._ddlCategoryList.value;
            }
            return null;
        },

        /* --------------------------------- properties -------------------------------------- */
        get_value: function () {        
            var val = this._getDropDownValue();
            return val;
        },
        set_value: function (value) {
            if (value !== undefined && value != null && this._ddlCategoryList != null) {
                this._ddlCategoryList.value = value;
            }
            this._value = value;
        },


        //get_value: function () {
        //    var val = this._getTextValue();
        //    return val;
        //},

        //set_value: function (value) {
        //    this._clearTextBox();
        //    if (value !== undefined && value != null && this._textBoxElement != null) {
        //        this._textBoxElement.value = value;
        //    }
        //    this._value = value;
        //},

        //get_textBoxElement: function () {
        //    return this._textBoxElement;
        //},

        //set_textBoxElement: function (value) {
        //    this._textBoxElement = value;
        //},

        get_ddlCategoryList: function () {
            return this._ddlCategoryList;
        },

        set_ddlCategoryList: function (value) {
            this._ddlCategoryList = value;
        } 

    };

    SitefinityWebApp.UserControls.ProductModule.CategoryFieldWidgetControl.CategoryTypeSelector.registerClass("SitefinityWebApp.UserControls.ProductModule.CategoryFieldWidgetControl.CategoryTypeSelector", Telerik.Sitefinity.Web.UI.Fields.FieldControl);

    definition.cs file 

    using System;
    using System.Linq;
    using Telerik.Sitefinity.Configuration;
    using Telerik.Sitefinity.Web.UI.Fields.Definitions;

    namespace SitefinityWebApp.UserControls.ProductModule.CategoryFieldWidgetControl
    {
        public class CategoryTypeSelectorDefinition : FieldControlDefinition, ICategoryTypeSelectorDefinition
        {
            #region Constuctors
            /// <summary>
            /// Initializes a new instance of the <see cref="CategoryTypeSelectorDefinition" /> class.
            /// </summary>
            public CategoryTypeSelectorDefinition()
                : base()
            {
            }

            /// <summary>
            /// Initializes a new instance of the <see cref="CategoryTypeSelectorDefinition" /> class.
            /// </summary>
            /// <param name="configDefinition">The config definition.</param>
            public CategoryTypeSelectorDefinition(ConfigElement configDefinition)
                : base(configDefinition)
            {
            }
            #endregion

            #region ICategoryTypeSelectorDefinition members
            /// <summary>
            /// Gets or sets the sample text.
            /// </summary>
            public string CategoryName
            {
                get
                {
                    return this.ResolveProperty("CategoryName", this.szCategoryName);
                }
                set
                {
                    this.szCategoryName = value;
                }
            }
            #endregion

            #region Private members
            private string szCategoryName;
            #endregion
        }
    }

    DefinitionElement.cs file 

    using System;
    using System.Configuration;
    using System.Linq;
    using Telerik.Sitefinity.Configuration;
    using Telerik.Sitefinity.Web.UI;
    using Telerik.Sitefinity.Web.UI.Fields.Config;

    namespace SitefinityWebApp.UserControls.ProductModule.CategoryFieldWidgetControl
    {
        public class CategoryTypeSelectorDefinitionElement : FieldControlDefinitionElement, ICategoryTypeSelectorDefinition
        {
            #region Constructors
            /// <summary>
            /// Initializes a new instance of the <see cref="CategoryTypeSelectorDefinitionElement" /> class.
            /// </summary>
            /// <param name="parent">The parent.</param>
            public CategoryTypeSelectorDefinitionElement(ConfigElement parent)
                : base(parent)
            {
            }
            #endregion

            #region FieldControlDefinitionElement members
            public override DefinitionBase GetDefinition()
            {
                return new CategoryTypeSelectorDefinition(this);
            }
            #endregion

            #region IFieldDefinition members
            public override Type DefaultFieldType
            {
                get
                {
                    return typeof(CategoryTypeSelector);
                }
            }
            #endregion

            #region ICategoryTypeSelectorDefinition
            /// <summary>
            /// Gets or sets the sample text.
            /// </summary>
            [ConfigurationProperty("CategoryName")]
            public string CategoryName
            {
                get
                {
                    return (string)this["CategoryName"];
                }
                set
                {
                    this["CategoryName"] = value;
                }
            }
            #endregion
        }
    }

    IDefnition.cs file

    using System;
    using System.Linq;
    using Telerik.Sitefinity.Web.UI.Fields.Contracts;

    namespace SitefinityWebApp.UserControls.ProductModule.CategoryFieldWidgetControl
    {
        public interface ICategoryTypeSelectorDefinition : IFieldControlDefinition
        {
            /// <summary>
            /// Gets or sets the sample text.
            /// </summary>
            /// <value>The sample text.</value>
            string CategoryName { get; set; }
        }
    }


    Regards,

    Aloy

    11 posts
    Registered:
    12 Jun 2012
    07 NOV
    LINK TO THIS POST

    Hi

    I have created Custom Field Controls for blog post With Sitefinity Thunder  and register that control in sitefinity admin. This field is not saving in admin while entering content and click save button.

     

    I am attaching three related controls, please inspect  it and let me know if i have done anything wrong. Also please change the file and revert back to me if possible.

    Its too urgent, kindly revert

    11 posts
    Registered:
    12 Jun 2012
    07 NOV
    LINK TO THIS POST

    Hi

    I have created Custom Field Controls for blog post With Sitefinity Thunder  and register that control in sitefinity admin. This field is not saving in admin while entering content and click save button.

     

    I am attaching three related controls, please inspect  it and let me know if i have done anything wrong. Also please change the file and revert back to me if possible.

    Its too urgent, kindly revert

  2. Georgi Georgiev
    Georgi Georgiev avatar
    10 posts
    Registered:
    27 Apr 2016
    11 Dec 2014
    Link to this post

    Hi Aloy,

    Thank you for contacting Sitefinity Support team.

    If I can understand it correct you have a dynamic module with category or choice field and you selected a custom field control for editing and displaying?

    Can you provide us with some more details on this, please? Moreover, I can see you are calling a custom service with "{'CategoryGUID':'" + ddlCategory + "'}"  would it be possible for you to explain us what is the logic in there? Is this what should save your changes? Can you describe us the business scenario behind the code you provided with some simple steps. As I can see you bind the dropdown firstly to the “All products Category” taxons.

    The rest of the code seems to be fine and nothing incorrect found there. I just need to clarify your scenario and review the code that saves the changes, understand what changes needs to be saved and etc. in order to advice you further on this.

    Looking forward hearing from you.

    Regards,
    Georgi Georgiev
    Telerik
     
    Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Sitefinity CMS Ideas&Feedback Portal and vote to affect the priority of the items
     
2 posts, 0 answered