« Volver
in asp.net read.

[ASP.NET] Validaciones no intrusivas en ASP.NET 4.5.

Hola a todos, volviendo al desarrollo Web, hoy quiero aprovechar este post para mostrar una de las nuevas características de ASP.NET 4.5 que son las validaciones no intrusivas y el error que vamos a obtener cuando creamos una nueva aplicación Web.

Vamos a crear una nueva aplicación Web, agregar una nueva página aspx y allí vamos a tener un formulario para el registro de personas, adicionalmente usaremos algunos validadores que ofrece ASP.NET (si no los conoces revisa este post), entonces el sencillo código que necesitamos es:

1: <formid="form1"runat="server"> 2: <div> 3: <table> 4: <tr> 5: <td>Nombre:td> 6: <td> 7: <asp:TextBoxID="txtNombre"runat="server"Width="300px">asp:TextBox> 8: <asp:RequiredFieldValidatorID="requiredNombre"runat="server"ControlToValidate="txtNombre"ErrorMessage="*">asp:RequiredFieldValidator> 9: td> 10: tr> 11: <tr> 12: <td>Correo:td> 13: <td> 14: <asp:TextBoxID="txtCorreo"runat="server"Width="300px">asp:TextBox> 15: <asp:RequiredFieldValidatorID="requiredCorreo"runat="server"ControlToValidate="txtCorreo"ErrorMessage="*">asp:RequiredFieldValidator> 16: td> 17: tr> 18: <tr> 19: <td>Usuario:td> 20: <td> 21: <asp:TextBoxID="txtUsuario"runat="server"Width="300px">asp:TextBox> 22: <asp:RequiredFieldValidatorID="requiredUsuario"runat="server"ControlToValidate="txtUsuario"ErrorMessage="*">asp:RequiredFieldValidator> 23: td> 24: tr> 25: <tr> 26: <td>Clave:td> 27: <td> 28: <asp:TextBoxID="txtClave"runat="server"Width="300px"TextMode="Password">asp:TextBox> 29: <asp:RequiredFieldValidatorID="requiredClave"runat="server"ControlToValidate="txtClave"ErrorMessage="*">asp:RequiredFieldValidator> 30: td> 31: tr> 32: <tr> 33: <td><asp:ButtonID="btnGuardar"runat="server"Text="Guardar"/>td> 34: tr> 35: table> 36: div> 37: form>

Como vemos, el HTML es muy simple, peor ahora si lanzamos la aplicación vamosa obtener el siguiente error:

error

Extraño no? simplemente creamos una página bastante sencilla (sin nada de código de servidor) y ya está fallando… pero si revisamos un poco el error vemos que dice “WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping…” y ya tenemos una idea del error, lo que pasa es que con ASP.NET 4.5 tenemos una nueva característica la cual reducir la cantidad de código JavaScript necesario, la definición exacta dice:

*You can now configure the built-in validator controls to use unobtrusive JavaScript for client-side validation logic. This significantly reduces the amount of JavaScript rendered inline in the page markup and reduces the overall page size. *

Y dicha característica viene habilitada por defecto, para deshabilitarla vamos a nuestro Global.asax y en el evento Application_Start le decimos:

1: ValidationSettings.UnobtrusiveValidationMode = System.Web.UI.UnobtrusiveValidationMode.None;

Y ahora si lanzamos de nuevo la aplicación va a funcionar… pero no estaríamos aprovechando la validación no intrusiva, y si revisamos el HTML que es generado en el cliente tenemos:

1: DOCTYPEhtml> 2:  3: <htmlxmlns="http://www.w3.org/1999/xhtml"> 4: <head><title> 5: Formulario 6: title>head> 7: <body> 8: <formmethod="post"action="index.aspx"onsubmit="javascript:return WebForm_OnSubmit();"id="form1"> 9: <divclass="aspNetHidden"> 10: <inputtype="hidden"name="__EVENTTARGET"id="__EVENTTARGET"value=""/> 11: <inputtype="hidden"name="__EVENTARGUMENT"id="__EVENTARGUMENT"value=""/> 12: <inputtype="hidden"name="__VIEWSTATE"id="__VIEWSTATE"value="2pkd4JZKXmDyDJwu0HIaaT5x/EzINW3Fmj5ECNYtq721M2fzxgYIW/yLzuVDUpE6C5+JtdW4Mo7Mh7EH1jcQPCiVMtXSlRRYD3i7hJ3zQLM="/> 13: div> 14:  15: <scripttype="text/javascript"> 16: // 17: var theForm = document.forms['form1']; 18: if (!theForm) { 19: theForm = document.form1; 20: } 21: function __doPostBack(eventTarget, eventArgument) { 22: if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 23: theForm.__EVENTTARGET.value = eventTarget; 24: theForm.__EVENTARGUMENT.value = eventArgument; 25: theForm.submit(); 26: } 27: } 28: //]]> 29: script> 30:  31:  32: 33:  34:  35: 36: 33:  34:  35: 36: 37: comments powered by Disqus