Escrito por: TiraCodigo
Etiquetas: asp.net, aplicación, MVC, Tutorial, Curso
En este punto, tenemos todo el conocimiento básico para crear una aplicación en ASP MVC, por lo tanto, empleando lo anterior, crearemos una aplicación, por ejemplo, realizaremos un contador de palabras en el cual aparte de mostrarnos el total de palabras, nos de la densidad de las palabras usadas, es decir, cuantas veces se reporte cada una, cabe mencionar que esta aplicación de ejemplo nos servirá para explicar los siguientes puntos del tutorial
Comenzamos a programar, lo primero que necesitamos es definir el modelo, en donde necesitaremos primeramente una clase la cual contenga una propiedad para el texto, total de palabras y una mas donde guardaremos la lista de la densidad de las palabras, para la densidad tambien realizaremos una clase mas para guardar la palabra y la cantidad de veces repetidas, lo cual nos quedaría de la siguiente manera
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ContadorPalabras.Models
{
public class MiModelo
{
public string Texto { get; set; }
public int TotalPalabras { get; set; }
public List<Densidad> DensidadPalabras { get; set; }
}
public class Densidad
{
public string Palabra { get; set; }
public int Cantidad { get; set; }
}
}
Ahora seguiremos con la programación del controller, realizaremos todo en el index, primeramente en el request inicialiaremos el modelo y lo pasaremos en la vista, y en en la parte del request o del post es donde se realizara la lógica, en donde tendremos que hacer lo siguiente:
- Crear una lista de delimitadores, que serán los caracteres por los cuales se van a identificar las palabras, por ejemplo, el espacio, la coma, el salto de linea
- Ya que tenemos las palabras en una lista, asignamos el total en la propiedad total del modelo
- Con la misma lista anterior, mediante linq, crearemos una query donde agrupemos las palabras y saquemos la densidad de cada una para ver la cantidad que se repite cada palabra, con esta info llenamos la lista del modelo de densidad de palabras
Lo anterior quedaría de la siguiente manera:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ContadorPalabras.Models;
using System.Linq;
namespace ContadorPalabras.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
var modelo = new MiModelo();
modelo.TotalPalabras = 0;
modelo.DensidadPalabras = new List<Densidad>();
return View(modelo);
}
[HttpPost]
public ActionResult Index(MiModelo modelo)
{
var palabras = new List<string>();
if (!string.IsNullOrEmpty(modelo.Texto))
{
var Delimitador= new List<char>();
Delimitador.Add(' ');
Delimitador.Add(',');
Delimitador.Add('\n');
palabras = modelo.Texto.Split(Delimitador.ToArray()).ToList();
modelo.TotalPalabras = palabras.Count();
var query = palabras.GroupBy(c => c.ToString()).Select(grupo => new Densidad
{
Palabra = grupo.Key,
Cantidad = grupo.Count()
}).OrderByDescending(x => x.Cantidad);
modelo.DensidadPalabras = query.ToList();
}
return View(modelo);
}
}
}
Ahora lo único que nos falta es la vista, en la cual básicamente tendremos dos columnas, una donde sera la captura del texto, y otra donde mostraremos el total de palabras y la densidad de las mismas con su respectiva cantidad de repeticiones
Para la primera columna, realizaremos el formulario con el BeginForm, dentro de este definiremos el TextAreaFor para capturar el texto y de la misma manera meteremos el botón correspondiente para realizar el submit
Y en la siguiente columna, meteremos los labels para indicar el total de las palabras, asi como un for each para mostrar todas las palabras con su densidad
@model ContadorPalabras.Models.MiModelo
@{
ViewBag.Title = "Home Page";
}
<div class="jumbotron">
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<div style="overflow:hidden">
<div style="width:600px; float:left">
<p class="lead">Ingresa un texto</p>
<p>@Html.TextAreaFor(m => m.Texto, new { style = "width: 400px !important; height: 150px;" })</p>
<p><input type="submit" class="btn btn-primary btn-lg" value="Contabilizar" /></p>
</div>
<div style="width:400px; float:right">
<p>Total de palabras = @Model.TotalPalabras </p>
<p>Densidad de palabras:</p>
@if (Model.DensidadPalabras !=null && Model.DensidadPalabras.Any()) {
foreach (var item in Model.DensidadPalabras)
{
<p style="text-indent: 3em">"@item.Palabra" - @item.Cantidad repedita(s)</p>
}
}
</div>
</div>
}
</div>
Listo, ahora podemos probar nuestra aplicación y se deberá ver mas o menos así:
A continuación te dejo los link tanto del proyecto como para que lo pruebes directamente, ahora que tenemos un ejemplo funcional de una aplicación en Asp.net MVC, podemos seguir con el siguiente punto donde veremos como realizar una llamada asíncrona con Ajax
Descargar el código fuente del ejemplo