<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Omar del Valle Rodríguez : ajax</title><link>http://geeks.ms/blogs/omarvr/archive/tags/ajax/default.aspx</link><description>Etiquetas: ajax</description><dc:language /><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Llamada ajax en MVC usando el $.post de jquery</title><link>http://geeks.ms/blogs/omarvr/archive/2010/11/29/llamada-ajax-en-mvc-usando-el-post-de-jquery.aspx</link><pubDate>Mon, 29 Nov 2010 15:22:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:185385</guid><dc:creator>Omar del Valle Rodríguez</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/omarvr/rsscomments.aspx?PostID=185385</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/omarvr/commentapi.aspx?PostID=185385</wfw:comment><comments>http://geeks.ms/blogs/omarvr/archive/2010/11/29/llamada-ajax-en-mvc-usando-el-post-de-jquery.aspx#comments</comments><description>&lt;p&gt;Hace poco pas&amp;eacute; por la necesidad de enviar un formulario al servidor usando ajax en una aplicaci&amp;oacute;n MVC. El problema principal que ten&amp;iacute;a era que el formulario inclu&amp;iacute;a un n&amp;uacute;mero &amp;ldquo;grande&amp;rdquo; de campos (o no tan grande pero resulta que soy un vago), por lo que no quer&amp;iacute;a pasar el trabajo de tener que convertir todo eso a JSON como par&amp;aacute;metros individuales. Tampoco deseaba, evidentemente, tener un m&amp;eacute;todo en el controlador al cual le llegaran 5 o m&amp;aacute;s par&amp;aacute;metros. &lt;/p&gt;
&lt;p&gt;Pues bien&amp;hellip; la vista en mi caso estaba dise&amp;ntilde;ada para trabajar con un modelo definido por m&amp;iacute;: &lt;/p&gt;
&lt;div class="source-code"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:blue;"&gt;public&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CustomerModel&lt;br /&gt;&lt;/span&gt;{&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; UserName { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; FirstName { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; LastName { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; Language { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt;&amp;nbsp;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;DataType&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;DataType&lt;/span&gt;.Password)]&lt;br /&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; Password { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;br /&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;DataType&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;DataType&lt;/span&gt;.Password)]&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; ConfirmPassword { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;La vista: &lt;/p&gt;
&lt;div class="source-code"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:blue;"&gt;@&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt; &lt;span style="color:maroon;"&gt;Page&lt;/span&gt; &lt;span style="color:red;"&gt;Title&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Language&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;C#&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;MasterPageFile&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;~/Views/Shared/Site.Master&amp;quot;&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:red;"&gt;Inherits&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:blue;"&gt;=&amp;quot;System.Web.Mvc.ViewPage&amp;lt;CustomerModel&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt; &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Mi formulario: &lt;/p&gt;
&lt;div class="source-code"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt; &lt;span style="color:blue;"&gt;using&lt;/span&gt; (Html.BeginForm()) { &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:blue;"&gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:maroon;"&gt;div&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;fieldset&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;legend&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Customer Information&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;legend&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;editor-label&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt; Html.LabelFor(m =&amp;gt; m.FirstName) &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;editor-field&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt; Html.TextBoxFor(m =&amp;gt; m.FirstName) &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;editor-label&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt; Html.LabelFor(m =&amp;gt; m.LastName) &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;editor-field&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt; Html.TextBoxFor(m =&amp;gt; m.LastName) &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;editor-label&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt; Html.LabelFor(m =&amp;gt; m.UserName) &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;editor-field&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt; Html.TextBoxFor(m =&amp;gt; m.UserName) &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;editor-label&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt; Html.LabelFor(m =&amp;gt; m.Password) &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;editor-field&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt; Html.PasswordFor(m =&amp;gt; m.Password) &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;editor-label&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt; Html.LabelFor(m =&amp;gt; m.ConfirmPassword) &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;editor-field&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt; Html.PasswordFor(m =&amp;gt; m.ConfirmPassword) &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;input&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;onclick&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;uploadCustomerForm()&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Register&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-TRAD" style="font-size:9.5pt;font-family:Consolas;mso-ansi-language:ES-TRAD;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;p&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;fieldset&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt; } &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;La soluci&amp;oacute;n ideal para m&amp;iacute; era poder pasar un objeto en javascript desde el cliente y que el controlador lo recibiera como el modelo asociado a la vista. Yo quer&amp;iacute;a que el m&amp;eacute;todo en mi controlador se viera as&amp;iacute;: &lt;/p&gt;
&lt;div class="source-code"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt;[&lt;span style="color:#2b91af;"&gt;AcceptVerbs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;HttpVerbs&lt;/span&gt;.Post)]&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:blue;"&gt;&lt;br /&gt;public&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt; &lt;span style="color:#2b91af;"&gt;ActionResult&lt;/span&gt; SaveCustomer(&lt;span style="color:#2b91af;"&gt;CustomerModel&lt;/span&gt; model)&lt;br /&gt;{&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; Content(&lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;This is my content: {0}, {1}&amp;quot;&lt;/span&gt;, &lt;/span&gt;&lt;span lang="ES-TRAD" style="font-size:9.5pt;font-family:Consolas;mso-ansi-language:ES-TRAD;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;model.LastName, model.FirstName)); &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Despu&amp;eacute;s de mucho andar por los rincones oscuros del mundo Google, hall&amp;eacute; una soluci&amp;oacute;n limpia, elegante y simple. &lt;/p&gt;
&lt;p&gt;Mi script: &lt;/p&gt;
&lt;div class="source-code"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:maroon;"&gt;script&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;/Scripts/jquery-1.4.1.min.js&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:blue;"&gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:maroon;"&gt;script&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; uploadCustomerForm()&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;{&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; data = $(&lt;span style="color:maroon;"&gt;&amp;#39;form&amp;#39;&lt;/span&gt;).serialize();&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:darkgreen;"&gt;//Enviar por post&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;$.post(&lt;span style="color:maroon;"&gt;&amp;#39;&lt;span style="background:yellow;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt; =Url.Action(&amp;quot;SaveCustomer&amp;quot;) &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;&lt;/span&gt;&amp;#39;&lt;/span&gt;, data, insertCallback);&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:blue;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;function&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt; insertCallback(data)&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;{&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;alert(data);&lt;span style="mso-spacerun:yes;"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:maroon;"&gt;script&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Pues s&amp;iacute;, as&amp;iacute; de simple result&amp;oacute; pasar el formulario al controlador y que este recibiera como par&amp;aacute;metro el modelo asociado a la vista. Esta instrucci&amp;oacute;n resume todo lo que necesitamos: &lt;/p&gt;
&lt;div class="source-code"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;color:blue;"&gt;var&lt;/span&gt;&lt;span style="font-size:9.5pt;font-family:Consolas;"&gt; data = $(&lt;span style="color:maroon;"&gt;&amp;#39;form&amp;#39;&lt;/span&gt;).serialize();&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Pero, &amp;iquest;d&amp;oacute;nde est&amp;aacute; el truco? &lt;/p&gt;
&lt;p&gt;Cada elemento input de mi formulario se crea usando el helper Html.TextBoxFor el cual es asociado a una propiedad del modelo. Esto, si miramos el HTML generado, crea un input cuyo &lt;span style="text-decoration:line-through;"&gt;ID&lt;/span&gt; Name corresponde con el nombre de la propiedad que, al ser serializado, crea &lt;span style="text-decoration:line-through;"&gt;un JSON que hace corresponder ID=valor&lt;/span&gt; una representaci&amp;oacute;n en el formato cl&amp;aacute;sico de URL (param=valor&amp;amp;m2=valor2&amp;amp;...).&lt;/p&gt;
&lt;p&gt;Formulario serializado: &lt;/p&gt;
&lt;div class="source-code"&gt;FirstName=aa&amp;amp;LastName=bb&amp;amp;UserName=aa.bb&amp;amp;Password=123&amp;amp;ConfirmPassword=123 &lt;/div&gt;
&lt;p&gt;Una curiosidad a tener en cuenta es: si miran el formulario podr&amp;aacute;n ver que he dejado fuera del formulario la propiedad Language de mi modelo, esto lo he hecho con toda intensi&amp;oacute;n para que veamos que no es necesario que nuestro formulario se corresponda 100% con el modelo que tenemos asociado a la vista, pero, s&amp;iacute; es necesario que cada &lt;span style="text-decoration:line-through;"&gt;ID&lt;/span&gt; Name de los elementos del formulario se corresponda con una propiedad llamada exactamente igual a la existente en el modelo. &lt;/p&gt;
&lt;p&gt;Con esto&amp;hellip; ya tenemos un post por ajax al controlador que recibe como par&amp;aacute;metro el modelo asociado a la vista. Esto es posible tambi&amp;eacute;n hacerlo usando ASP.NET, pero eso lo dejo para un pr&amp;oacute;ximo art&amp;iacute;culo. &lt;/p&gt;
&lt;p&gt;;) &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=185385" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/omarvr/archive/tags/ajax/default.aspx">ajax</category><category domain="http://geeks.ms/blogs/omarvr/archive/tags/jquery/default.aspx">jquery</category><category domain="http://geeks.ms/blogs/omarvr/archive/tags/mvc/default.aspx">mvc</category></item><item><title>JSONP</title><link>http://geeks.ms/blogs/omarvr/archive/2009/11/29/jsonp.aspx</link><pubDate>Sat, 28 Nov 2009 23:28:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:161479</guid><dc:creator>Omar del Valle Rodríguez</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/omarvr/rsscomments.aspx?PostID=161479</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/omarvr/commentapi.aspx?PostID=161479</wfw:comment><comments>http://geeks.ms/blogs/omarvr/archive/2009/11/29/jsonp.aspx#comments</comments><description>&lt;p&gt;Este ejemplo me decid&amp;iacute; a escribirlo despu&amp;eacute;s de leer la serie de art&amp;iacute;culos publicados en el blog de Jos&amp;eacute; Alarc&amp;oacute;n sobre JSONP.&lt;/p&gt;
&lt;p&gt;1-&amp;nbsp;&lt;a target="_blank" href="http://www.jasoft.org/blog/PermaLink,guid,b146e68c-dbb3-4646-87d4-81bb2c6f61e0.aspx"&gt;Llamadas AJAX a servidores remotos&lt;/a&gt;.&lt;br /&gt;2-&amp;nbsp;&lt;a target="_blank" href="http://www.jasoft.org/blog/PermaLink,guid,0ffd0b9a-d109-49db-84eb-87cefc769447.aspx"&gt;Soporte desde ASP.NET AJAX 4.0&lt;br /&gt;&lt;/a&gt;3-&amp;nbsp;&lt;a target="_blank" href="http://www.jasoft.org/blog/PermaLink,guid,35f70d6b-47f3-4ae1-b877-ec2450982f2d.aspx"&gt;Cuestiones de seguridad y ASP.NET rompiendo la compatibilidad en 3.5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Requisitos&lt;/strong&gt;: Crear un input tipo text con auto completamiento de las ciudades de Espa&amp;ntilde;a.&amp;nbsp;Para esto usar&amp;eacute; geonames.org, que es un servicio gratuito que nos permite obtener geo-localizaciones a partir de determinados par&amp;aacute;metros y cuya documentaci&amp;oacute;n la encontramos en su sitio:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://www.geonames.org/export/geonames-search.html"&gt;http://www.geonames.org/export/geonames-search.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Como JQuery est&amp;aacute; de moda&amp;hellip; y este soporta JSONP, voy a usar el pluging que existe para el auto-completamiento y que lo pueden encontrar en &lt;a target="_blank" href="http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/"&gt;http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Con esto creo que completo todo lo que necesito as&amp;iacute; que vamos con el c&amp;oacute;digo. Empezamos con lo de siempre, indicando cual es el control al cual le vamos a aplicar el &amp;ldquo;autocomplete&amp;rdquo; y cu&amp;aacute;l ser&amp;aacute; la fuente de datos.&lt;/p&gt;
&lt;div class="source-code"&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;$(&lt;span style="color:#a31515;"&gt;&amp;quot;#txt_city&amp;quot;&lt;/span&gt;).autocomplete(&amp;quot;&lt;span style="color:#a31515;"&gt;http://ws.geonames.org/searchJSON&amp;quot;,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;Vamos a realizar un peque&amp;ntilde;o truco, porque al final el objetivo de este art&amp;iacute;culo es justificar el uso de JSONP, as&amp;iacute; empezamos indicando los par&amp;aacute;metros del &amp;ldquo;autocomplete&amp;rdquo; esperando como respuesta un JSON.&lt;/p&gt;
&lt;div class="source-code"&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;dataType: &lt;span style="color:#a31515;"&gt;&amp;#39;json&amp;#39;&lt;/span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;Seguimos especificando una funci&amp;oacute;n que realizar&amp;aacute; un Parse de los datos que me retorna geonames, para poder entreg&amp;aacute;rselos al autocomplete de la manera que &amp;eacute;l lo entiende.&lt;/p&gt;
&lt;div class="source-code"&gt;
&lt;p class="MsoNormal" style="line-height:normal;margin-bottom:0pt;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;parse: &lt;span style="color:blue;"&gt;function&lt;/span&gt;(data) &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; rows = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Array();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = data.geonames;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height:normal;margin-bottom:0pt;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;for&lt;/span&gt;(&lt;span style="color:blue;"&gt;var&lt;/span&gt; i=0; i&amp;lt;data.length; i++)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rows[i] =&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;data:data[i], &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value:data[i].name, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result:data[i].name &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;}&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height:normal;margin-bottom:0pt;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; rows;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;},&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;Nada importante hasta aqu&amp;iacute;.. una funci&amp;oacute;n que convierte el resultado en un arreglo que contiene el dato, el valor de cada elemento y el resultado. Seguimos con la funci&amp;oacute;n que se llamar&amp;aacute; a la hora de mostrar el autocomplete e indicamos que solo mostraremos el nombre de la ciudad.&lt;/p&gt;
&lt;div class="source-code"&gt;
&lt;p class="MsoNormal" style="line-height:normal;margin-bottom:0pt;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;formatItem: &lt;span style="color:blue;"&gt;function&lt;/span&gt;(row, i, n) &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; row.name;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;},&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;Continuamos incluyendo los par&amp;aacute;metros necesarios para realizar la b&amp;uacute;squeda (Pa&amp;iacute;s, indicar que no deseo lugares geogr&amp;aacute;ficos, etc.) Todos estos par&amp;aacute;metros est&amp;aacute;n bien documentados en el sitio de geoname.&lt;/p&gt;
&lt;div class="source-code"&gt;
&lt;p class="MsoNormal" style="line-height:normal;margin-bottom:0pt;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;extraParams: &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; q: &lt;span style="color:#a31515;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; limit: &lt;span style="color:#a31515;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; country: &lt;span style="color:#a31515;"&gt;&amp;#39;ES&amp;#39;&lt;/span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; featureClass: &lt;span style="color:#a31515;"&gt;&amp;#39;P&amp;#39;&lt;/span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxRows: 50,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name_startsWith: &lt;span style="color:blue;"&gt;function&lt;/span&gt; () &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#txt_city&amp;quot;&lt;/span&gt;).val() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;},&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;Luego decimos que nuestro autocomplete espera un m&amp;aacute;ximo de 50 elementos y listo.&lt;/p&gt;
&lt;div class="source-code"&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;max: 50&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;Con definir nuestro html con un input cuyo ID=&amp;rdquo;txt_city&amp;rdquo;, tendremos nuestro autocomplete, as&amp;iacute; que ejecutamos&amp;hellip;.&lt;/p&gt;
&lt;p&gt;&lt;img height="220" width="650" src="http://www.odelvalle.com/images/omar-delvalle_sinportales_es/cross_sites.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OPS!!! Acceso denegado&lt;/strong&gt;&amp;hellip; Este error proviene precisamente por la imposibilidad de hacer un pedido a un dominio que no es el nuestro, estamos intentando hacer un Cross Site Scripting.&lt;/p&gt;
&lt;p&gt;&amp;iquest;C&amp;oacute;mo lo resolvemos? Un buen comienzo es estudiando la serie de art&amp;iacute;culos propuestos al inicio de este post, pero para nuestro ejemplo, JQuery lo hace tan simple como ya nos tiene acostumbrado. Cambiamos el tipo de dato que espera el autocomplete a jsonp:&lt;/p&gt;
&lt;div class="source-code"&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;dataType: &lt;span style="color:#a31515;"&gt;&amp;#39;jsonp&amp;#39;&lt;/span&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;y&amp;hellip;.&lt;/p&gt;
&lt;p&gt;&lt;img height="447" width="353" src="http://www.odelvalle.com/images/omar-delvalle_sinportales_es/Yupiii.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;We are happy :-)&lt;/p&gt;
&lt;p&gt;Aqu&amp;iacute; les dejo un enlace al ejemplo completo, que no es m&amp;aacute;s que una simple p&amp;aacute;gina html ya que no usamos ASP.NET para nada, es&amp;nbsp;&lt;strong&gt;c&amp;oacute;digo html duro y puro&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://omar-delvalle.sinportales.es/ejemplos/jsonp/ciudades.html"&gt;Ejemplo&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=161479" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/omarvr/archive/tags/cross+site+scripting/default.aspx">cross site scripting</category><category domain="http://geeks.ms/blogs/omarvr/archive/tags/ajax/default.aspx">ajax</category><category domain="http://geeks.ms/blogs/omarvr/archive/tags/jsonp/default.aspx">jsonp</category><category domain="http://geeks.ms/blogs/omarvr/archive/tags/jquery/default.aspx">jquery</category></item></channel></rss>