public PartialViewResult ProductSearch(ProductSearch model) {
			WidgetActionSettingModel settings = new WidgetActionSettingModel();

			if (this.WidgetPayload is WidgetActionSettingModel) {
				settings = (WidgetActionSettingModel)this.WidgetPayload;
				settings.LoadData();
			}

			model = InitProductSearch(model);

			if (String.IsNullOrEmpty(model.AltViewName)) {
				return PartialView(model);
			} else {
				return PartialView(model.AltViewName, model);
			}
		}
        public ProductSearch InitProductSearch(ProductSearch model)
        {
            if (model == null) {
                model = new ProductSearch();
                model.SelectedCat = -1;
            }

            using (var db = new NorthwindDataContext()) {
                model.Options = db.Categories.ToList();

                if (model.SelectedCat.HasValue) {
                    model.Results = db.Products.Where(x => x.CategoryID == model.SelectedCat.Value).ToList();
                }
            }

            return model;
        }
		public ProductSearch GetData() {
			ProductSearch model = new ProductSearch();
			LoadData();

			using (var db = new NorthwindDataContext()) {
				if (this.CategoryIDs.Any()) {
					model.Options = (from c in db.Categories
									 where this.CategoryIDs.Contains(c.CategoryID)
									 select c).ToList();

					model.Results = (from p in db.Products
									 where this.CategoryIDs.Contains(p.CategoryID.Value)
									 select p).ToList();
				}
			}
			return model;
		}