public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            var context = new ActionContext
            {
                Parameters =
                    bindingContext.HttpContext.Request.Form.Keys
                    .ToDictionary(x => x, x => bindingContext.HttpContext.Request.Form[x].ToString()),
                CustomerCode = GetValue(CustomerCodeKey, bindingContext)
            };

            Guid.TryParse(GetValue(BackendSidKey, bindingContext), out var backendSid);

            context.BackendSid = backendSid;
            context.UserId     = _provider.GetUserId();
            context.UserName   = _provider.GetUserName();

            int.TryParse(GetValue(ContentIdKey, bindingContext), out var contentId);

            context.ContentId  = contentId;
            context.ActionCode = GetValue(ActionCodeKey, bindingContext);

            var contentItems   = GetValue(ContentItemIdKey, bindingContext);
            var contentItemIds = new List <int>();

            if (!string.IsNullOrEmpty(contentItems))
            {
                var ids = contentItems.Split(',');

                foreach (var id in ids)
                {
                    if (int.TryParse(id, out var contentItemId))
                    {
                        if (contentItemId <= 0)
                        {
                            bindingContext.ModelState.AddModelError(ContentItemIdKey, id + " must be greater than 0");
                            return(Task.CompletedTask);
                        }

                        contentItemIds.Add(contentItemId);
                    }
                    else
                    {
                        bindingContext.ModelState.AddModelError(ContentItemIdKey, id + " must be integer");
                        return(Task.CompletedTask);
                    }
                }
            }

            context.ContentItemIds = contentItemIds.ToArray();

            bindingContext.Result = ModelBindingResult.Success(context);
            return(Task.CompletedTask);
        }
        public ActionResult Publish(SendProductModel model)
        {
            var action = ObjectFactoryBase.Resolve <PublishAction>();

            if (model != null && ModelState.IsValid)
            {
                var idsList = model.ArticleIds.SplitString(' ', ',', ';', '\n', '\r').Distinct().ToArray();
                if (idsList.Length > 200)
                {
                    ModelState.AddModelError("", ProductCardStrings.TooMuchProducts);
                    return(View("Send", model));
                }

                int[] ids;
                try
                {
                    ids = idsList.Select(int.Parse).ToArray();
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ProductCardStrings.NotNumberValues + ". " + ex.Message);
                    return(View("Send", model));
                }

                if (ModelState.IsValid)
                {
                    try
                    {
                        var context = new ActionContext {
                            ContentId = 288, ContentItemIds = ids
                        };
                        action.Process(context);
                        model.Message = ProductCardStrings.PublishedAndSendSuccess;
                    }
                    catch (ActionException ex)
                    {
                        model.Message = ex.Message;
                    }
                }
            }

            return(View("Send", model));
        }