Mostrando las entradas con la etiqueta ASP .NET MVC. Mostrar todas las entradas
Mostrando las entradas con la etiqueta ASP .NET MVC. Mostrar todas las entradas

3 abr 2014

// // 2 comentarios

ASP .NET MVC - Aumentar el tamaño máximo permitido para serializar en formato JSON

Introducción


Al usar JSON como formato de transferencia de nuestros datos desde el controlador e intentar enviar un volumen considerable de datos, podríamos tener un error como el siguiente:

Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.

Esto se da debido que el tamaño máximo para la serialización tiene un tope configurado en la propiedad maxJsonLength que se usa para enviar la información en formato JSON.

Cambiando el valor máximo permitido


Para resolver el problema podríamos intentar cambiando el archivo de configuración de nuestra aplicación así:
<system.web.extensions>
  <scripting>
    <webServices>
      <jsonSerialization maxJsonLength="50000000"/>
    </webServices>
  </scripting>
</system.web.extensions>


Pero curiosamente esta configuración no hace efecto en los resultados que deseamos, el motivo de esto se encuentra como nota en la documentación de la propiedad, donde indica que solo se usa para instancias internas, así que toca modificar por otro lado, para lo cual tenemos 2 opciones:

Asignar un valor a la propiedad.


Si normalmente devolvemos la data de esta manera:

return Json(data, JsonRequestBehavior.DenyGet); 

Deberíamos cambiar a esto:

var jsonResult = Json(data, JsonRequestBehavior.DenyGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult; 

Si nos fijamos al inicio la propiedad tiene valor nulo, así que al asignarle el valor que deseamos como tope para la serialización se va a poder enviar la data sin ningún problema.

Sobrescribir el controlador base


El método Json esta implementado en la clase Controller, que es la clase base de la cual heredan todos los controladores, si necesitamos hacer el cambio para todo nuestro proyecto podemos crear un controlador base que herede de esta clase y nuestros controladores hacerlos heredar de esta nueva clase o si lo deseamos para un controlador especifico solo podemos sobrescribir el método dentro de nuestro controlador de la siguiente manera:

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
{
    return new JsonResult()
    {
        Data = data,
        ContentType = contentType,
        ContentEncoding = contentEncoding,
        JsonRequestBehavior = behavior,
        MaxJsonLength = Int32.MaxValue
    };
}

Con esto ya no tendríamos el error mencionado inicialmente, podrían cambiar el Int32.MaxValue por algún valor entero que deseen que se restrinja.
Leer post completo

29 ene 2014

// // Comentar

ASP .NET MVC - Mostrar mensajes de validación de controles en HTML


Introducción


En ASP .NET MVC tenemos un diccionario llamado Model State que almacena los errores de validación que se puedan generar al enviar los datos de un formulario y estos se puedan mostrar al usuario a través de una key que los identifica, pues bien el detalle de esto es que mostrara los mensajes como simple texto y para una necesidad en particular se puede requerir que estos mensajes se muestren en HTML, para ello describo en este post como lograrlo.


Creación de la clase helper


Para mostrar los mensajes de validación en HTML crearemos un helper para lo cual tomaremos como referencia el mismo código fuente de ASP .NET MVC que esta disponible en Codeplex y le haremos algunas modificaciones para lograr nuestro objetivo.

La clase que usaremos para adaptarla a nuestras necesidades será ValidationExtencion.cs de la cual tomaremos los siguientes métodos:
 
public static MvcHtmlString ValidationMessage(this HtmlHelper htmlHelper, string modelName, object htmlAttributes)




 




public static MvcHtmlString ValidationMessage(this HtmlHelper htmlHelper, string modelName, string validationMessage, IDictionary<string, object> htmlAttributes)




 




private static MvcHtmlString ValidationMessageHelper(this HtmlHelper htmlHelper, ModelMetadata modelMetadata, string expression, string validationMessage, IDictionary<string, object> htmlAttributes)




 




private static FieldValidationMetadata ApplyFieldValidationMetadata(HtmlHelper htmlHelper, ModelMetadata modelMetadata, string modelName)




 




private static string GetInvalidPropertyValueResource(HttpContextBase httpContext)




 




private static string GetUserErrorMessageOrDefault(HttpContextBase httpContext, ModelError error, ModelState modelState)





Además de estos métodos de los cuales modificaremos algunos también agregaremos un método, debido a que en ASP .NET MVC esta declarado como interno y no podemos usarlos desde el helper, lo creamos dentro del mismo helper:



 




public static MvcHtmlString ToMvcHtmlString(this TagBuilder builder, TagRenderMode renderMode)







Modificación de métodos



Una vez copiados los métodos a la clase que será nuestro helper, debe quedarnos similar a la imagen siguiente


 




 


Primero hay que renombrar el método ValidationMessage para que se llame ValidationMessageHTML que será así como lo llamaremos desde nuestras vistas.


 


Ahora  el método principal que debemos hacer los cambios es ValidationMessageHelper, dentro de este método cambiamos la línea








FormContext formContext = htmlHelper.ViewContext.GetFormContextForClientValidation();






por


 




FormContext formContext = htmlHelper.ViewContext.ClientValidationEnabled ? htmlHelper.ViewContext.FormContext : null;




 


Esto, debido a que se están usando métodos internos de ASP .NET MVC y no los tenemos disponibles en nuestra clase.


 


También cambiamos la línea principal donde hará que el texto lo devuelva en HTML.


 




builder.SetInnerText(GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, modelState));




por


 




builder.InnerHtml = GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, modelState);




 


Con estos cambios aplicados a los métodos ya podemos hacer uso del helper para que nos muestre los mensajes de error en HTML, simplemente llamándolo de la siguiente manera:








@Html.ValidationMessageHTML("keyerror", new { @class = "field-validation-error-html" })






Les dejo la clase helper que muestro en el post para que la puedan usar directamente.





Leer post completo

29 sept 2009

// // Comentar

Editor de Texto en ASP .NET MVC

Cuando se desarrolla una aplicación que va a contender secciones donde se necesita ingresar texto con formato, siempre es muy útil un editor de texto que nos permita esto, estos se usan en diversos tipos de aplicaciones, en esta oportunidad les mostraré como usar el CKEditor con ASP .NET MVC.

Lo primero que hay que hacer es descargarse las librerías, descomprimirlo y copiarlo en el directorio /Content/js/ luego agregar la referencia al archivo ckeditor.js en la vista donde se va a usar o en la masterpage si se desea para toda la aplicación, seria algo similar a esto

<script src="../../Content/js/ckeditor/ckeditor.js" type="text/javascript" ></script>

Con esto ya tenemos la referencia al script a usar, ahora para ponerlo a funcionar agregamos lo siguiente


 

<%= Html.TextArea("Descripcion", "", new { @name = "Descripcion" })%>
<script type="text/javascript">
//<![CDATA[

// This call can be placed at any point after the
// <textarea>, or inside a <head><script> in a
// window.onload event handler.

// Replace the <textarea id="editor"> with an CKEditor
// instance, using default configurations.
CKEDITOR.replace("Descripcion");

//]]>
</script>
 
Con esto podemos logra algo así
ckeditor
 

Este editor tiene muchas opciones, como mostrar solo algunos comandos, skins, entre otros, los invito a revisarlo, esta muy bueno

Leer post completo

28 abr 2009

// // 1 comentario

ASP.NET MVC Training Kit

Si haz oído hablar o haz leído algo sobre MVC y te interesa aprender y no sabes por donde empezar, pues aquí tienes una gran ayuda, el Training KIT de ASP .NET MVC, donde encontraras presentaciones, demos, labs y mas recursos para empezar con este nuevo framework.

Download ASP.NET MVC Training Kit

Leer post completo