{"id":1934,"date":"2022-08-30T15:20:40","date_gmt":"2022-08-30T15:20:40","guid":{"rendered":"https:\/\/unknownerror.org\/index.php\/2013\/12\/05\/cant-find-action-only-on-live-server-works-fine-in-local-server-collection-of-common-programming-errors\/"},"modified":"2022-08-30T15:20:40","modified_gmt":"2022-08-30T15:20:40","slug":"cant-find-action-only-on-live-server-works-fine-in-local-server-collection-of-common-programming-errors","status":"publish","type":"post","link":"https:\/\/unknownerror.org\/index.php\/2022\/08\/30\/cant-find-action-only-on-live-server-works-fine-in-local-server-collection-of-common-programming-errors\/","title":{"rendered":"can&#39;t find action only on live server, works fine in local server-Collection of common programming errors"},"content":{"rendered":"<blockquote>\n<p>A public action method &#8216;AddPromoCode&#8217; was not found on controller &#8216;Flazingo.Controllers.PositionController&#8217;. at System.Web.Mvc.Controller.HandleUnknownAction(String actionName) at System.Web.Mvc.Controller.ExecuteCore() at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) at System.Web.Mvc.MvcHandler.c_<em>DisplayClass6.c<\/em>_DisplayClassb.b_<em>5() at System.Web.Mvc.Async.AsyncResultWrapper.c<\/em>_DisplayClass1.b_<em>0() at System.Web.Mvc.MvcHandler.c<\/em>_DisplayClasse.b__d() at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously)<\/p>\n<\/blockquote>\n<p>Here is the ajax call:<\/p>\n<pre><code>$.ajax({\n            url: '\/Position\/AddPromoCode',\n            type: 'POST',\n            dataType: \"json\",\n            contentType: \"application\/json; charset:utf-8\",\n            data: ko.toJSON(viewModel),\n            success: function(result){\n                if(result.TypeId == 1){\n                    viewModel.promoOff(viewModel.grandTotal() * (result.Value \/ 100));\n                    viewModel.PromoCodes.push(promoCode + \": \"+ result.Value + \"% off\");\n                }else{\n                    viewModel.PromoCodes.push(promoCode + \": \"+ result.Value + \"days free\");\n                }\n            },\n            error: function (xmlHttpRequest, textStatus, errorThrown) {\n                var errorData = jQuery.parseJSON(xmlHttpRequest.responseText);\n                var errorMessages = [];\n                \/\/this ugly loop is because List is serialized to an object instead of an array\n                for (var key in errorData)\n                {\n                    errorMessages.push(errorData[key]);\n                }\n                toastr.error(errorMessages.join(\"<br \/>\"), 'Uh oh');\n            }\n        });\n<\/code><\/pre>\n<p>EDIT: POST METHOD<\/p>\n<pre><code>[HttpPost]\n        public ActionResult AddPromoCode(PaymentViewModel model)\n        {\n            List errors = new List();\n            try\n            {\n\n                var position = db.Positions.SingleOrDefault(x =&gt; x.PositionId == model.PositionId);\n                if (position != null)\n                {\n                    var promo = db.Promotions.SingleOrDefault(x =&gt; x.Code.ToLower() == model.PromoCode.ToLower() &amp;&amp; x.IsUserEntered);\n                    if (promo != null)\n                    {\n                        var promoUsage = db.PromoCodeUsages.SingleOrDefault(x =&gt; x.PromotionId == promo.PromotionId &amp;&amp; x.ClientId == position.Client.Id);\n                        int used = 0;\n                        if (promoUsage != null)\n                        {\n                            used = promoUsage.Used;\n                        }\n\n                        if (used &lt; promo.QuantityUsage)\n                        {\n                            if (DateTime.Today &gt;= promo.StartDate &amp;&amp; DateTime.Today  x.PromotionId == promo.PromotionId);\n                                if (clientPC != null)\n                                {\n                                    clientPC.Used = used + 1;\n                                }\n                                else\n                                {\n                                    clientPC = new PromoCodeUsage()\n                                    {\n                                        PromotionId = promo.PromotionId,\n                                        Used = used + 1\n                                    };\n                                    position.Client.PromoCodes.Add(clientPC);\n                                }\n\n                                db.SaveChanges();\n\n                                Response.StatusCode = (int)HttpStatusCode.OK;\n                                return Json(new { Value = promo.Value, TypeId = promo.PromotionTypeId });\n\n                            }\n                            else\n                            {\n                                Response.StatusCode = (int)HttpStatusCode.BadRequest;\n                                errors.Add(\"Sorry seems like this promotion code has expired\");\n                                db.SaveChanges();\n                                return Json(errors);\n                            }\n                        }\n                        else\n                        {\n                            Response.StatusCode = (int)HttpStatusCode.BadRequest;\n                            errors.Add(\"Sorry seems like you have already used this code, or its not applicable anymore!\");\n                            db.SaveChanges();\n                            return Json(errors);\n                        }\n                    }\n                    else\n                    {\n                        Response.StatusCode = (int)HttpStatusCode.BadRequest;\n                        errors.Add(string.Format(\"Sorry we don't have '{0}' promocode in our system!\", model.PromoCode));\n                        db.SaveChanges();\n                        return Json(errors);\n                    }\n                }\n\n                Response.StatusCode = (int)HttpStatusCode.BadRequest;\n                errors.Add(\"We coudn't find this position in our system!\");\n                db.SaveChanges();\n                return Json(errors);\n            }\n            catch (Exception ex)\n            {\n                logger.Log(LogLevel.Error, string.Format(\"{0} \\n {1}\", ex.Message, ex.StackTrace));\n                Response.StatusCode = (int)HttpStatusCode.BadRequest;\n                errors.Add(\"Sorry there was internal errors, flazingo.com has been notified.\");\n                return Json(errors);\n            }\n        }\n<\/code><\/pre>\n<p>JSON Structure:<\/p>\n<pre><code>{\"PositionTitle\":\"Testing B Syntax Error\",\"PromoCode\":\"FREECB\",\"FirstName\":null,\"LastName\":null,\"Address\":null,\"SuiteNumber\":null,\"PhoneNumber\":null,\"City\":null,\"State\":null,\"ZipCode\":null,\"CreditCardNumber\":null,\"ExperationMonth\":null,\"ExperationYear\":null,\"CCV\":null,\"ClientId\":2,\"CustomerProfileId\":64277420,\"PositionId\":78,\"EmailAddress\":\"jmogera@gmail.com\",\"Years\":[{\"Selected\":false,\"Text\":\"2013\",\"Value\":\"2013\"},{\"Selected\":false,\"Text\":\"2014\",\"Value\":\"2014\"},{\"Selected\":false,\"Text\":\"2015\",\"Value\":\"2015\"},{\"Selected\":false,\"Text\":\"2016\",\"Value\":\"2016\"},{\"Selected\":false,\"Text\":\"2017\",\"Value\":\"2017\"},{\"Selected\":false,\"Text\":\"2018\",\"Value\":\"2018\"},{\"Selected\":false,\"Text\":\"2019\",\"Value\":\"2019\"},{\"Selected\":false,\"Text\":\"2020\",\"Value\":\"2020\"},{\"Selected\":false,\"Text\":\"2021\",\"Value\":\"2021\"},{\"Selected\":false,\"Text\":\"2022\",\"Value\":\"2022\"}],\"MonthList\":[{\"Selected\":false,\"Text\":\"Jan\",\"Value\":\"01\"},{\"Selected\":false,\"Text\":\"Feb\",\"Value\":\"02\"},{\"Selected\":false,\"Text\":\"Mar\",\"Value\":\"03\"},{\"Selected\":false,\"Text\":\"Apr\",\"Value\":\"04\"},{\"Selected\":false,\"Text\":\"May\",\"Value\":\"05\"},{\"Selected\":false,\"Text\":\"Jun\",\"Value\":\"06\"},{\"Selected\":false,\"Text\":\"Jul\",\"Value\":\"07\"},{\"Selected\":false,\"Text\":\"Aug\",\"Value\":\"08\"},{\"Selected\":false,\"Text\":\"Sep\",\"Value\":\"09\"},{\"Selected\":false,\"Text\":\"Oct\",\"Value\":\"10\"},{\"Selected\":false,\"Text\":\"Nov\",\"Value\":\"11\"},{\"Selected\":false,\"Text\":\"Dec\",\"Value\":\"12\"}],\"IsAddingNewCard\":false,\"HaveCardOnFile\":true,\"AddOns\":[{\"PositionId\":78,\"ProductId\":2,\"Description\":\"The heart and soul, we take you through the hiring process, start to finish and give you every tool you need to make a great hire along the way.\",\"Price\":39,\"HasAdded\":true,\"AutoRenew\":true,\"Name\":\"Complete Hiring System\",\"AddOnId\":122}],\"CreditCards\":[{\"CreditCardId\":16,\"LastFour\":\"1060\",\"HolderName\":\"Barrett Kuethen\",\"ExpDate\":\"\/Date(1422766800000)\/\",\"IsDefault\":true}],\"CardOnFile\":{\"CreditCardId\":16,\"LastFour\":\"1060\",\"HolderName\":\"Barrett Kuethen\",\"ExpDate\":\"\/Date(1422766800000)\/\",\"IsDefault\":true},\"PromoCodes\":[],\"__ko_mapping__\":{\"CardOnFile\":{},\"ignore\":[],\"include\":[\"_destroy\"],\"copy\":[],\"observe\":[],\"mappedProperties\":{\"PositionTitle\":true,\"PromoCode\":true,\"FirstName\":true,\"LastName\":true,\"Address\":true,\"SuiteNumber\":true,\"PhoneNumber\":true,\"City\":true,\"State\":true,\"ZipCode\":true,\"CreditCardNumber\":true,\"ExperationMonth\":true,\"ExperationYear\":true,\"CCV\":true,\"ClientId\":true,\"CustomerProfileId\":true,\"PositionId\":true,\"EmailAddress\":true,\"Years[0].Selected\":true,\"Years[0].Text\":true,\"Years[0].Value\":true,\"Years[1].Selected\":true,\"Years[1].Text\":true,\"Years[1].Value\":true,\"Years[2].Selected\":true,\"Years[2].Text\":true,\"Years[2].Value\":true,\"Years[3].Selected\":true,\"Years[3].Text\":true,\"Years[3].Value\":true,\"Years[4].Selected\":true,\"Years[4].Text\":true,\"Years[4].Value\":true,\"Years[5].Selected\":true,\"Years[5].Text\":true,\"Years[5].Value\":true,\"Years[6].Selected\":true,\"Years[6].Text\":true,\"Years[6].Value\":true,\"Years[7].Selected\":true,\"Years[7].Text\":true,\"Years[7].Value\":true,\"Years[8].Selected\":true,\"Years[8].Text\":true,\"Years[8].Value\":true,\"Years[9].Selected\":true,\"Years[9].Text\":true,\"Years[9].Value\":true,\"Years\":true,\"MonthList[0].Selected\":true,\"MonthList[0].Text\":true,\"MonthList[0].Value\":true,\"MonthList[1].Selected\":true,\"MonthList[1].Text\":true,\"MonthList[1].Value\":true,\"MonthList[2].Selected\":true,\"MonthList[2].Text\":true,\"MonthList[2].Value\":true,\"MonthList[3].Selected\":true,\"MonthList[3].Text\":true,\"MonthList[3].Value\":true,\"MonthList[4].Selected\":true,\"MonthList[4].Text\":true,\"MonthList[4].Value\":true,\"MonthList[5].Selected\":true,\"MonthList[5].Text\":true,\"MonthList[5].Value\":true,\"MonthList[6].Selected\":true,\"MonthList[6].Text\":true,\"MonthList[6].Value\":true,\"MonthList[7].Selected\":true,\"MonthList[7].Text\":true,\"MonthList[7].Value\":true,\"MonthList[8].Selected\":true,\"MonthList[8].Text\":true,\"MonthList[8].Value\":true,\"MonthList[9].Selected\":true,\"MonthList[9].Text\":true,\"MonthList[9].Value\":true,\"MonthList[10].Selected\":true,\"MonthList[10].Text\":true,\"MonthList[10].Value\":true,\"MonthList[11].Selected\":true,\"MonthList[11].Text\":true,\"MonthList[11].Value\":true,\"MonthList\":true,\"IsAddingNewCard\":true,\"HaveCardOnFile\":true,\"AddOns[0].PositionId\":true,\"AddOns[0].ProductId\":true,\"AddOns[0].Description\":true,\"AddOns[0].Price\":true,\"AddOns[0].HasAdded\":true,\"AddOns[0].AutoRenew\":true,\"AddOns[0].Name\":true,\"AddOns[0].AddOnId\":true,\"AddOns\":true,\"CreditCards[0].CreditCardId\":true,\"CreditCards[0].LastFour\":true,\"CreditCards[0].HolderName\":true,\"CreditCards[0].ExpDate\":true,\"CreditCards[0].IsDefault\":true,\"CreditCards\":true,\"CardOnFile\":true,\"PromoCodes\":true},\"copiedProperties\":{}},\"addNewCreditCardValidationGroup\":{\"FirstName\":null,\"LastName\":null,\"Address\":null,\"City\":null,\"State\":null,\"CreditCardNumber\":null,\"ExperationMonth\":null,\"ExperationYear\":null,\"CCV\":null,\"errors\":[]},\"promoOff\":0,\"grandTotal\":39}\n<\/code><\/pre>\n<p>Note: the call is made within a knockout click function. Note: I have created another issue, thinking it was client side issue. This is related. Uncaught SyntaxError: Unexpected token B on live but not local server<\/p>\n<ol>\n<li>\n<p>It can&#8217;t find <code>AddPromoCode<\/code> so, there seems a url problem. You should add the application name at ajax code in server like <code>url: '\/ApplicationName\/Position\/AddPromoCode'<\/code>.<\/p>\n<p>You can also do this with url.action html helper, like:<\/p>\n<pre><code>\/\/ In layout or view:\n@Html.Hidden(\"urlPrefix\", Url.Action(\"\", \"\"))\n\n\/\/ In Javascript\nvar baseUrl = $(\"input#urlPrefix\").val();\n\n$.ajax({ url: baseUrl + '\/Position\/AddPromoCode', ...\n<\/code><\/pre>\n<p>The part <code>Url.Action(\"\", \"\")<\/code> creates <code>'\/ApplicationName'<\/code> part dynamically.<\/p>\n<\/li>\n<\/ol>\n<p id=\"rop\"><small>Originally posted 2013-12-05 09:40:20. <\/small><\/p>","protected":false},"excerpt":{"rendered":"<p>A public action method &#8216;AddPromoCode&#8217; was not found on controller &#8216;Flazingo.Controllers.PositionController&#8217;. at System.Web.Mvc.Controller.HandleUnknownAction(String actionName) at System.Web.Mvc.Controller.ExecuteCore() at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) at System.Web.Mvc.MvcHandler.c_DisplayClass6.c_DisplayClassb.b_5() at System.Web.Mvc.Async.AsyncResultWrapper.c_DisplayClass1.b_0() at System.Web.Mvc.MvcHandler.c_DisplayClasse.b__d() at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously) Here is the ajax call: $.ajax({ url: &#8216;\/Position\/AddPromoCode&#8217;, type: &#8216;POST&#8217;, dataType: &#8220;json&#8221;, contentType: &#8220;application\/json; charset:utf-8&#8221;, data: ko.toJSON(viewModel), success: function(result){ if(result.TypeId == 1){ viewModel.promoOff(viewModel.grandTotal() [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1934","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/1934","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/comments?post=1934"}],"version-history":[{"count":0,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/1934\/revisions"}],"wp:attachment":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/media?parent=1934"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/categories?post=1934"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/tags?post=1934"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}