Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Usando Formularios
form
El elemento HTML form ( <form> ) representa una sección de un documento que contiene controles interactivos que
permiten a un usuario enviar información a un servidor web.
Atributos
action
La URI de un programa que procesa la información enviada por medio del formulario.
method
El método HTTP que el navegador usa para enviar el formulario. Valores posibles son:
post: Corresponde al método HTTP POST ; los datos del formulario son incluidos en el cuerpo del formulario y son
enviados al servidor.
get: Corresponde al método HTTP GET ; los datos del formulario son adjuntados a la URI del atributo action, con
un '?' como separador, y la URI resultante es enviada al servidor. Use este método cuando el formulario no tiene
efectos secundarios y contiene solo caracteres ASCII.
enctype
Cuando el valor del atributo method es post , este atributo es el tipo MIME del contenido que es usado para enviar el
formulario al servidor.
Ejemplos:
Page 1/11 © Copyright Wednesday, Aug 10, 2016, 1:15 PM by Samuel Mestanza A.
</form>
Html Helpers
Los Html Helpers son métodos que pueden ser invocados en la propiedad HTML en una vista . También tenemos
URL Helpers (a través de la propiedad Url ) y Ajax Helpers (a través de la propiedad Ajax )
Todos estos Helpers tienen el mismo objetivo: hacer que el desarrollo de vistas sea mas fácil. El Helper URL también
está disponible desde los Controladores.
Html.BeginForm
El Helper Html.BeginForm renderiza un formulario, Ejemplo:
@using (Html.BeginForm()) {
<fieldset>
<legend>Edit Album</legend>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
La versión de BeginForm del código anterior sin ningún parámetro envía un HTTP POST a la URL
actual.
El resultado es:
Tambien podemos personalizar el Html.BeginForm para que apunte a un Accion y Controller específico, incluso
cambiar el method , Ejemplo:
Page 2/11 © Copyright Wednesday, Aug 10, 2016, 1:15 PM by Samuel Mestanza A.
El resultado es:
Si quisieramos personalizar aun más el form sólo agregamos un cuarto parametro de tipo htmlAttributes ,
Ejemplo:
El resultado es:
Html.ValidationSummary
El helper ValidationSummary muestra una lista desordenada de todos los errores de validación en el diccionario
ModelState .
@Html.ValidationSummary(excludePropertyErrors: true)
El parámetro booleano que está utilizando (con un valor true ) está diciendo al helper que excluya los errores a nivel
de propiedades. En otras palabras, le está diciendo que sólo muestre los errores en ModelState asociados con el
modelo en sí, y no los errores asociados a las propiedades de modelo. Ejemplo:
El primer error es un error de nivel de modelo, ya que no se proporcionó una clave (o se ha proporcionado una clave
de vacía) para asociar el error con una propiedad específica.
El segundo error que está relacionado con la propiedad Titulo , por lo que no se mostrará en el área de validación
(a menos que quite el parámetro en el helper, o cambia el valor a false ). En este escenario , el helper genera el
siguiente codigo HTML :
<div class="validation-summary-errors">
<ul>
<li>This is all wrong!</li>
</ul>
</div>
Html.TextBox
Page 3/11 © Copyright Wednesday, Aug 10, 2016, 1:15 PM by Samuel Mestanza A.
El helper Html.TextBox genera un textbox. Ejemplo:
@Html.TextBox("Title","Titulo de la Canción")
El resultado es:
Si estubiera fuertemente tipado se usa el helper Html.TextBoxFor , asumiendo que el modelo tuviera una propiedad
Precio , el codigo seria el siguiente:
Html.TextArea
El helper Html.TexArea genera un textarea. Ejemplo:
El resultado es:
Si quisieramos personalizar un poco mas el TextArea e indicar el numero de filas y columnas, podemos agregar
mas parametos. Ejemplo:
El resultado es:
Si estubiera fuertemente tipado se usa el helper Html.TextAreaFor , asumiendo que el modelo tuviera una propiedad
Comentario , el codigo seria el siguiente:
Html.Label
El helper Html.Label genera un label. Ejemplo:
@Html.Label("ForControl","Display Text")
El resultado es:
Si estubiera fuertemente tipado se usa el helper Html.LabelFor , asumiendo que el modelo tuviera una propiedad
User , el codigo seria el siguiente:
@Html.LabelFor(m=>m.User, "Usuario:")
Page 4/11 © Copyright Wednesday, Aug 10, 2016, 1:15 PM by Samuel Mestanza A.
Html.DropDownList and Html.ListBox
Ambos helpers DropDownList y ListBox generan un elemento <select /> . DropDownList permite seleccionar un
único item, mientras ListBox permite seleccionar varios items.
Para trabajar los helpers DropDownList y ListBox necesitamos asociar una colecion del tipo SelectListItem ,
SelectListItem representa un elemento <option /> .
Dependiendo que tipo de lista vamos a utilizar pasamos un MultiSelectList para el ListBox o un SelectList
para un DropDownList . Ejemplo:
SelectController
/// <summary>
/// Generamos lista de Paises que se motraran en una lista desplegable
/// </summary>
/// <param name="items">lista de opciones a mostrarse</param>
/// <param name=""Value"">Nombre de la propiedad se se tomará como valor al
seleccionarse</param>
/// <param name=""Text"">Nombre de la propiedad se mostrará</param>
ViewBag.Pais = new SelectList(items,"Value","Text");
return View();
}
ViewBag es útil cuando se desea transferir datos temporales entre el controllador y la vista. ViewBag
es una propiedad de tipo dinámico.
SeleccionarPaises.cshtml
<div>
@Html.Label("Seleccione un Pais")
@Html.DropDownList("Pais",(SelectList)ViewBag.Pais,"[-– Seleccione un Pais --]", new {
@class = "form-control"})
<br/>
@Html.Label("Seleccione los Paises")
@Html.ListBox("Paises",(MultiSelectList)ViewBag.Paises,new { @class = "form-control"})
</div>
El resultado es:
Page 5/11 © Copyright Wednesday, Aug 10, 2016, 1:15 PM by Samuel Mestanza A.
<div>
<label for="Seleccione_un_Pais">Seleccione un Pais</label>
<select class="form-control" id="Pais" name="Pais"><option value="">[-– Seleccione un
Pais --]</option>
<option value="PE">Peru</option>
<option value="CL">Chile</option>
<option value="EQ">Ecuador</option>
</select>
<br/>
<label for="Seleccione_los_Paises">Seleccione los Pais</label>
<select class="form-control" id="Paises" multiple="multiple" name="Paises">
<option value="PE">Peru</option>
<option value="CL">Chile</option>
<option value="EQ">Ecuador</option>
</select>
</div>
Hay otra forma mas sencilla de trabajar ambos helpers, estos se pueden generar a partir de colecciones de cualquier
tipo de objectos, es basante útil cuando se trae datos de un repositorio.
/// <summary>
/// Generamos lista de Paises que se motraran en una lista desplegable
/// </summary>
/// <param name="items">lista de opciones a mostrarse</param>
/// <param name=""Id"">Nombre de la propiedad se se tomará como valor</param>
/// <param name=""NombrePais"">Nombre de la propiedad se mostrará</param>
ViewBag.Pais = new SelectList(paises,"Id","NombrePais");
return View();
}
<div>
@Html.Label("Seleccione un Paises")
@Html.DropDownListFor(m=>m.IdPais,(SelectList)ViewBag.Pais,"[-– Seleccione un Pais --]",
new { @class = "form-control"})
<br/>
@Html.Label("Seleccione los Pais")
@Html.ListBoxFor(m=>m.IdPais,(MultiSelectList)ViewBag.Paises,new { @class = "form-
control"})
</div>
Html.ValidationMessage
Cuando existe un error en el diccionario ModelState para un campo determinado, puede utilizar el Helper
ValidationMessage para mostrar el mensaje . Por ejemplo, en la siguiente acción del controlador , introduciremos un
error para el campo Title :
AlbumController
Page 6/11 © Copyright Wednesday, Aug 10, 2016, 1:15 PM by Samuel Mestanza A.
[HttpPost]
public ActionResult Edit(int id, FormCollection collection) {
var album = storeDB.Albums.Find(id);
ModelState.AddModelError("Title", "What a terrible name!");
return View(album);
}
Edit.cshtml
@Html.ValidationMessage("Title")
El resultado es:
Si estubiera fuertemente tipado se usa el helper Html.ValidationMessageFor , asumiendo que el modelo tuviera una
propiedad NombreUsuario , el codigo seria el siguiente:
Html.Hidden
EL helper Html.Hidden renderiza un input hidden, Ejemplo:
@Html.Hidden("wizardStep", "1")
El resultado es:
Si estubiera fuertemente tipado se usa el helper Html.HiddenFor , asumiendo que el modelo tuviera una propiedad
WizardStep , el codigo seria el siguiente:
Html.RadioButton
El Helper Html.RadioButton renderiza un radio button, Ejemplo:
@Html.RadioButton("color", "red")
@Html.RadioButton("color", "blue", true)
@Html.RadioButton("color", "green")
El resultado es:
Page 7/11 © Copyright Wednesday, Aug 10, 2016, 1:15 PM by Samuel Mestanza A.
El Helper Html.RadioButton tiene una desventaja cueando se lo usa fuertemente tipado, se tiene que indicar el valor
y la etiqueta del radio button que el usuario visualiza.
Html.CheckBox
El helper Html.CheckBox es el único que renderiza 2 html , Ejemplo:
@Html.CheckBox("IsDiscounted")
El helper genera 2 entradas debido a que la especificación de HTML indica que un navegador presentará un valor
para una casilla de verificación ( checkbox ) sólo cuando la casilla de verificación está activada ( seleccionada ).
En este ejemplo , la segunda entrada garantiza que aparecerá un valor para IsDiscounted incluso cuando el usuario
no seleccione el checkbox .
Si estubiera fuertemente tipado se usa el helper Html.CheckBoxFor , asumiendo que el modelo tuviera una propiedad
IsActive , el codigo seria el siguiente:
Rendering Helpers
Html.ActionLink
El método ActionLink genera un hipervínculo(anchor tag) a una acción del controlador
Cuando se necesita un enlace que apunta a una acción de un controlador diferente, podemos especificar el nombre
del controlador como tercer argumento para ActionLink . Por ejemplo, para vincular a la acción Index de
ShoppingCartController , utilice el siguiente código :
En muchos casos, se tendrá más parámetros que enviar al controlador. Por ejemplo, es posible que tenga que pasar
un valor de ID, o algún otro parámetro mediante un ActionLink , afortunadamente, se permite sobrecargar el
Page 8/11 © Copyright Wednesday, Aug 10, 2016, 1:15 PM by Samuel Mestanza A.
ActionLink y pasar todo un objeto de tipo RouteValueDictionary de tipo anonimo. Por ejemplo, construir un enlace
para editar un registro cuyo Id e 10720, puede utilizar el siguiente código:
Html.RouteLink
El helper RouteLink sigue el mismo patrón que el helper ActionLink sino que acepta un nombre de ruta y no tiene
argumentos para el nombre de controlador y nombre de acción. Por ejemplo:
URL Helpers
Los URL Helpers son similares a los HTML Helpers ActionLink y RouteLink , pero en lugar de generar codigo
HTML solamente construyen URLs y lo retornan como cadenas.
Url.Action
El helper Url.Action es exactamente igual a ActionLink , pero no devuelve una etiqueta de anclaje. Por ejemplo:
<span>
@Url.Action("Browse", "Store", new { genre = "Jazz" }, null)
</span>
<span>
/Store/Browse?genre=Jazz
</span>
Url.Content
El helper Url.Content es particularmente útil , ya que puede convertir una ruta realiva a una ruta absoluta de la
aplicación. Ejemplo:
Html.Partial
Page 9/11 © Copyright Wednesday, Aug 10, 2016, 1:15 PM by Samuel Mestanza A.
El helper Html.Partial genera una vista parcial en una línea. Por lo general, una vista parcial es una fracción de
codigo reutilizable que se desea procesar diferentes vistas. El Helper Partial tiene cuatro sobrecargas :
Tengamos en cuenta que al llamar una vista parcial no es necesario especificar la extensión o ruta de acceso porque
la lógica del motor de ejecución utiliza la localiza cuando este en la carpeta Views > Shared
@Html.Partial("AlbumDisplay")
Html.Action
El Helper Html.Action es similar al helper Html.Partial , la diferencia es que Html.Action genera una vista
parcial a partir del Action de un Controller ,la ventaja de esto es que Action puede pasar directamente el
modelo a la vista parcial. Ejemplo:
Controller MyController
[ChildActionOnly]
public ActionResult Menu()
{
var menu = GetMenuFromSomewhere();
return PartialView(menu);
}
}
Observe que el Action Menu es marcado con un ChildActionOnlyAttribute , este atributo evita que
lo podamos invocar en tiempo de ejecución directamente por Url , en su lugar solo permite llamadas a
travez de @Html.Action . El ChildActionOnlyAttribute no es necesario, pero por lo general se
recomienda colocarlo para este tipo de actiones;
El Action Menu instancia un modelo de tipo menú y devuelve una vista parcial con sólo el menú:
//_MenuPartial.cshtml
@model Menu
<ul>
@foreach (var item in Model.MenuItem)
{
<li>@item.Text</li>
}
</ul>
<html>
<head>
Page 10/11 © Copyright Wednesday, Aug 10, 2016, 1:15 PM by Samuel Mestanza A.
<title>Index with Menu</title>
</head>
<body>
@Html.Action("Menu")
<h1>Welcome to the Index View</h1>
</body>
</html>
Page 11/11 © Copyright Wednesday, Aug 10, 2016, 1:15 PM by Samuel Mestanza A.