viernes, 18 de mayo de 2012

Upload file MVC 3

Actualmente estoy trabajando en un proyecto de una aplicación MVC. En esta aplicación hay que crear usuarios donde podamos adjuntar una foto del usuario.

Cuando utilizamos MVC y queremos usar un input de tipo file, hay que cambiar alguna cosilla en el form del página, a continuación comentamos como habría que hacerlo.

Por defecto si en una vista usamos la siguiente declaración de tag form:

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>


</fieldset>
}


Esto nos incluye en nuestro html el siguiente tag:



<form action="/Controller/Action" method="post">
<fieldset>
</fieldset>
</form>


Este tag form no contiene el atributo enctype, por lo que usara el enctype por defecto, es decir: “application/x-www-form-urlencoded”, pero este tag no nos sirve para hacer un post de un documento, por lo que tendremos que cambiar nuestra declaración del tag form, de manera que el enctype sea “multipart/form-data”, esto lo conseguimos de la siguiente forma:



@using (Html.BeginForm("Action", "Controller", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
<fieldset>


</fieldset>
}


De esta forma ya obtenemos el tag form que necesitamos para poder subir un fichero:



<form action="/Controller/Action" enctype="multipart/form-data" method="post">
<fieldset>
</fieldset>
</form>


Una vez tenemos el form preparado, ya sólo necesitamos incluir un input de tipo file, por lo que nuestra vista podría quedar de la siguiente forma:



@using (Html.BeginForm("Action", "Controller", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Upload file</legend>
<div class="editor-label">
@Html.Label("Choose file")
</div>
<div class="editor-field">
<input type="file" name="file" id="file" />
</div>

</fieldset>
}


Por último nuestro controller quedaría de la siguiente forma:



public class ControllerController : Controller
{
[HttpPost]
public ActionResult Action(MyViewModel viewModel, HttpPostedFileBase file)
{
if (!ModelState.IsValid)
{

}
}
}

jueves, 17 de mayo de 2012

BDD Training

Quería compartir una presentación que he elaborado para un training interno de Spenta. En esta training se hablará sobre BDD y que herramientas tenemos en el mundo .NET para llevar a cabo una aplicación a partir del diseño dirigido por comportamientos.

Así que sin más dilación os dejo un enlace a la presentación.

http://prezi.com/zcuuubv7hifl/behavior-driven-development/