What is wrong with this Widget Extension?

I have created a widget extension to return a simple array, but it won't work. Here it is:

namespace LocationData
{
    public class Location
    {

        public Array GetAllCountries()
        {
            string[] countries = { "United States", "United Kingdom", "Canada"};
            return countries;
        }

    }

    public class LocationWidgetExtension : IScriptedContentFragmentExtension
    {
        #region IScriptedContentFragmentExtension Members

        public string ExtensionName
        {
            get { return "Ibby_v1_LocationData"; }
        }

        public object Extension
        {
            get { return new Location(); }
        }

        #endregion

        #region IPlugin Members

        public string Name
        {
            get { return "GetLocationData"; }
        }

        public string Description
        {
            get { return "Get Location Data"; }
        }

        public void Initialize()
        {
        }

        #endregion
    }

}

And the Velocity Script

#set ($countries = $ibby_v1_LocationData.GetAllCountries())
#foreach($country in $countries)
    <span>$country</span>
#end

Parents Reply Children
  • I believe so. Here's the C# code:

    namespace LocationData
    {
        public class Location
        {
    
            public List<CountryItem> GetAllCountries()
            {
                SqlDataAccess sd = new SqlDataAccess();
                SqlCommand sc = sd.GetCommand("EXEC ibby_GetAllCountries");
                DataTable dt = sd.Execute(sc);
                CountryItem ct;
                List<CountryItem> li = new List<CountryItem>();
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    ct = new CountryItem();
                    ct.iso2 = dt.Rows[i]["iso2"].ToString();
                    ct.country = dt.Rows[i]["country"].ToString();
                    li.Add(ct);
                }
                return li; //dt.AsEnumerable().Select(r => r.Field<string>("country")).ToArray();
            }
    
            public List<RegionItem> GetRegionsInCountry(string iso2)
            {
                SqlDataAccess sd = new SqlDataAccess();
                SqlCommand sc = sd.GetCommand("EXEC ibby_GetRegionsInCountry " + iso2);
                DataTable dt = sd.Execute(sc);
                RegionItem ct;
                List<RegionItem> li = new List<RegionItem>();
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    ct = new RegionItem();
                    ct.admin_code = dt.Rows[i]["admin_code"].ToString();
                    ct.admin_name = dt.Rows[i]["admin_name"].ToString();
                    li.Add(ct);
                }
                return li; //dt.AsEnumerable().Select(r => r.Field<string>("country")).ToArray();
            }
    
    
    
        }
    
        public class LocationWidgetExtension : IScriptedContentFragmentExtension
        {
            #region IScriptedContentFragmentExtension Members
    
            public string ExtensionName
            {
                get { return "Ibby_v1_LocationData"; }
            }
    
            public object Extension
            {
                get { return new Location(); }
            }
    
            #endregion
    
            #region IPlugin Members
    
            public string Name
            {
                get { return "GetLocationData"; }
            }
    
            public string Description
            {
                get { return "Get Location Data"; }
            }
    
            public void Initialize()
            {
            }
    
            #endregion
        }
    
        public class CountryItem
        {
            public string iso2;
            public string country;
        }
    
        public class RegionItem
        {
            public string admin_code;
            public string admin_name;
        }
    
    
    }
    

  • If you debug your c# code and look at the List object you are returning, is it populated with the data you expect?

  • Yes, it is. I have also tested it with a console application.

  • Is there a reason your classes for the Item classes just define instance variables and not properties?   That could your issue when its getting translated to the scripting language.