{"id":54,"date":"2009-12-09T20:21:00","date_gmt":"2009-12-09T10:21:00","guid":{"rendered":"http:\/\/chuchuva.com\/pavel\/?p=54"},"modified":"2009-12-11T16:49:39","modified_gmt":"2009-12-11T05:49:39","slug":"how-to-use-clientscriptmanager-registerforeventvalidation-method","status":"publish","type":"post","link":"https:\/\/chuchuva.com\/pavel\/2009\/12\/how-to-use-clientscriptmanager-registerforeventvalidation-method\/","title":{"rendered":"How to use ClientScriptManager.RegisterForEventValidation method"},"content":{"rendered":"<p>Have you ever encountered this error:<\/p>\n<blockquote><p>Invalid postback or callback argument. \u00c2\u00a0Event validation is enabled using &lt;pages enableEventValidation=&#8221;true&#8221;\/&gt; in configuration or &lt;%@ Page EnableEventValidation=&#8221;true&#8221; %&gt; in a page. \u00c2\u00a0For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. \u00c2\u00a0If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.<\/p><\/blockquote>\n<p>That&#8217;s pretty long error message. I get this exception if I add items to drop-down control from JavaScript. The question is how to use ClientScriptManager.RegisterForEventValidation method?<\/p>\n<p>First, let&#8217;s reproduce the problem. Create a new website and copy\/paste this code:<\/p>\n<pre><code class=\"prettyprint\">&lt;asp:DropDownList ID=\"dd\" runat=\"server\"&gt;\r\n  &lt;asp:ListItem&gt;One&lt;\/asp:ListItem&gt;\r\n  &lt;asp:ListItem&gt;Two&lt;\/asp:ListItem&gt;\r\n&lt;\/asp:DropDownList&gt;\r\n&lt;asp:Button ID=\"Button1\" runat=\"server\" Text=\"Test\" \/&gt;\r\n\r\n&lt;script src=\"http:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/1.3.2\/jquery.min.js\"\r\n  type=\"text\/javascript\"&gt;&lt;\/script&gt;\r\n&lt;script type=\"text\/javascript\"&gt;\r\n  $(function()\r\n  {\r\n    $(\"#&lt;%= dd.ClientID %&gt;\").append($(\"&lt;option \/&gt;\")\r\n      .val(3)\r\n      .text(\"Three!\"));\r\n  });\r\n&lt;\/script&gt;<\/code><\/pre>\n<p>If you select option &#8220;Three&#8221; sure enough, exception is thrown. To prevent it you need to supply all possible values for drop-down control:<\/p>\n<pre class=\"prettyprint\"><code>protected override void Render(HtmlTextWriter writer)\r\n{\r\n  Page.ClientScript.RegisterForEventValidation(dd.UniqueID, \"3\");\r\n  Page.ClientScript.RegisterForEventValidation(dd.UniqueID, \"4\");\r\n  Page.ClientScript.RegisterForEventValidation(dd.UniqueID, \"11\");\r\n  \/\/ and so on\r\n  base.Render(writer);\r\n}\r\n<\/code><\/pre>\n<p>The exception is fixed but server variable for drop-down control is useless &#8211; it has no idea that you&#8217;ve added new item so dd.SelectedValue will give One, not 3. You need to read POST variable directly instead, like this:<\/p>\n<pre class=\"prettyprint\"><code>protected void Page_Load(object sender, EventArgs e)\r\n{\r\n   if (IsPostBack)\r\n      Response.Write(Request.Form[dd.UniqueID]);\r\n}\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Have you ever encountered this error: Invalid postback or callback argument. \u00c2\u00a0Event validation is enabled using &lt;pages enableEventValidation=&#8221;true&#8221;\/&gt; in configuration or &lt;%@ Page EnableEventValidation=&#8221;true&#8221; %&gt; in a page. \u00c2\u00a0For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. \u00c2\u00a0If the data is valid &hellip; <a href=\"https:\/\/chuchuva.com\/pavel\/2009\/12\/how-to-use-clientscriptmanager-registerforeventvalidation-method\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">How to use ClientScriptManager.RegisterForEventValidation method<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[8],"tags":[],"class_list":["post-54","post","type-post","status-publish","format-standard","hentry","category-develop"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/chuchuva.com\/pavel\/wp-json\/wp\/v2\/posts\/54","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chuchuva.com\/pavel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chuchuva.com\/pavel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chuchuva.com\/pavel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/chuchuva.com\/pavel\/wp-json\/wp\/v2\/comments?post=54"}],"version-history":[{"count":0,"href":"https:\/\/chuchuva.com\/pavel\/wp-json\/wp\/v2\/posts\/54\/revisions"}],"wp:attachment":[{"href":"https:\/\/chuchuva.com\/pavel\/wp-json\/wp\/v2\/media?parent=54"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chuchuva.com\/pavel\/wp-json\/wp\/v2\/categories?post=54"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chuchuva.com\/pavel\/wp-json\/wp\/v2\/tags?post=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}