¿Cómo enviar un valor en ViewBag por RedirectToAction en C# MVC .Net?

Algunas veces tenemos la necesidad de llamar un método por medio de otro, y para ello hacemos uso de RedirectToAction.

RedirectToAction nos sirve para redirigir al usuario a otro controlador o a otro método dependiendo de la lógica de negocio, pero aparte, a veces necesitamos recibir en nuestro elemento destino algún valor para mostrarle al usuario o para realizar alguna validación. Para ello lo primero que se nos viene a la mente es por medio de ViewBag.

Lamentablemente ViewBag no tiene un tiempo de vida más allá del dominio del método, pero podemos apoyarnos de otro diccionario llamado TempData el cual se mantiene en toda la vida de la solicitud HTTP.

A continuación muestro un ejemplo sencillo de cómo quedaría:


public ActionResult Accion1 {
 TempData["mensaje"] = "Un mensaje feliz :)";

 //redirigimos a la Accion2 del mismo controlador
 return RedirectToAction("Action2");

}

public ActionResult Accion2 {

  if(TempData["mensaje"])
     ViewBag.mensaje = TempData["mensaje"].ToString();

  //de esta manera nuestra vista recibiria el ViewBag.mensaje solo cuando TempData no sea null
  return View();
}

¿Cómo obtener todos los parámetros enviados a un controller? C# MVC .Net

Cuando estamos utilizando MVC .Net muchas veces es necesario guardar lo que el usuario está enviando en logs o en la base de datos para poder monitorear errores de usuario final (Ver log sencillo en c# .Net).

De la siguiente forma obtenemos todos los parámetros enviados y ordenados en una variable cadena:


string parametros="";

//recorremos todos los parametros
 foreach (var parameter in Request.Params.AllKeys)
                {
                    parametros += parameter + ": " + Request.Params[parameter]+"\n";
                }

//se ira guardando de la siguiente forma
//parametro1: pato
//parametro2: pato2

Creación de archivo PDF en C# a partir de un archivo HTML (sin crystal report, sin itextsharp)

Creación de un archivo pdf sin utilizar ni crystal report ni itextsharp, de esta manera no dependemos de dll engorrosas como Crystal Reports.

Liga de libreria: https://wkhtmltopdf.org/

Experimentando con indices en SQL Server – En vivo

¿Cual es la diferencia de utilizar o no utilizar indices en nuestras tablas? Experimento con unas consultas para ver el rendimiento de utilizarlos y no utilizarlos:

¿Cómo ponerle una contraseña a un pdf en c#?

Para poner un password a un pdf en C# podemos hacer uso de la librería iTextSharp(la cual pueden instalar con nuget, ¿Cómo utilizar nuget?) la cual tiene muchas funcionalidades para el manejo de archivos pdf.
Partiendo de un archivo pdf ya existente con el siguiente código:


 using (var input = new FileStream("C:/archivoOriginal.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
 using (var output = new FileStream("C:/archivoConContrasena.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    var reader = new PdfReader(input);
                    PdfEncryptor.Encrypt(reader, output, true,"tucontraseña", "tucontraseña", PdfWriter.ALLOW_PRINTING);
                }

¿Cómo parsear el formato dd-mm-yy en un DateTime en C# .Net?

Para poder parsear el formato dd-mm-yy en c# .Net, el problema radica que en el año solo tenemos 2 dígitos, pero esto no impide que se pueda realizar de manera fácil, para hacerlo basta con utilizar el método ParseExact de DateTime de la siguiente forma:


DateTime fecha = DateTime.ParseExact("30-01-16", "dd-MM-yy", CultureInfo.InvariantCulture);