TOC

This article has been localized into Spanish by the community.

Modelos:

Model Binding

La comunicación entre un cliente (usualmente un explorador) un servidor web es muy simple- las cadenas son transmitidas de ida y vuelta porque el cliente no tiene ningún entendimiento de tus objetos .NET. Así que de vuelta en los viejos días del clásico ASP y ASP.NET WebForms, antes de que el framework MVC fuera introducido en framework .NET, actualizar un modelo era un poco tedioso.s primero, tú tenías y crear un formulario con todos los campos que el usuario pudiera cambiar. Cuando este formulario era posteado de regreso al servidor, tú tenías que leer cada uno de los campos del formulario y asignarlos a tu modelo. Si Nosotros tomamos este camino y lo usamos en ASP.NET MVC, se vería algo como esto:

<form method="post" action="/ModelBinding/UpdateFromOldSchoolForm">
    <input type="text" name="txtFirstName" value="@Model.FirstName" />
    <input type="text" name="txtLastName" value="@Model.LastName" />
    <input type="submit" value="Update" />
</form>
public IActionResult UpdateFromOldSchoolForm()
{
    WebUser webUser = LoadUserFromDatabase();

    webUser.FirstName = Request.Form["txtFirstName"];
    webUser.LastName = Request.Form["txtLastName"];

    UpdateUserInDatabase(webUser);

    return Content("User updated!");
}

Un formulario manualmente construido, el cual posteara los valores a un método, el cual luego nos leerá y asignará a un objeto. Todo muy básico y de la vieja escuela. Sin embargo, con ASP.NET MVC, el concepto de Model Binding fue introducido. Éste le permite a tus visitas usar la información del modelo para generar por ejemplo un formulario para evitar el modelo, pero aún de más ayuda, eso le permite al método receptor en el controlador tratar los valores posteados como un objeto del tipo del modelo, en vez de forzarte a leer cadenas del formulario. En otras palabras, puedes seguir trabajando con objetos a lo largo de todo el la comunicación entre el servidor y el cliente, gracias a la magia del Model Binding. ¡Veamos cómo funciona esto!

Usando Model Binding

Primero, necesitamos un modelo. Sí tú no sabes lo que es un modelo, te sugiero regresar algunos artículos atrás y leerlos. Crearemos un modelo simple para manejar información sobre un usuario:

public class WebUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

En nuestro controlador, ahora pasar una instancia de esta clase a la vista. En una aplicación del mundo real probablemente obtendríamos un objeto WebUser de la base de datos, pero para conservar las cosas simple, solamente generaremos uno nuevo para esta demostración:

[HttpGet]
public IActionResult SimpleBinding()  
{  
    return View(new WebUser() { FirstName = "John", LastName = "Doe" });  
}

Dejando que nuestra vista sepan Qué tipo de modelo esperar, con la directiva @model, podemos usar numerosos métodos de ayuda (más de esos más adelante) para ayudar con la generación de un formulario:

@using(var form = Html.BeginForm())
{
    <div>
@Html.LabelFor(m => m.FirstName)
@Html.TextBoxFor(m => m.FirstName)
    </div>

    <div>
@Html.LabelFor(m => m.LastName)
@Html.TextBoxFor(m => m.LastName)
    </div>

    <input type="submit" value="Submit" />
}

El resultado será un formulario muy genérico, pero con etiquetas y cajas de texto designados a hospedar las propiedades de tu modelo:

Por defecto, el formulario será posteado de regreso a la misma URL que lo entregó, para que pueda manejarlo, meses un método del controlador que acepte POST para manejar el formulario presentado:

[HttpPost]
public IActionResult SimpleBinding(WebUser webUser)
{
    //TODO: Update in DB here...
    return Content($"User {webUser.FirstName} updated!");
}

Nota como nuestra acción de controlador toma sólo un parámetro, del mismo tipo que el modelo que pasamos a nuestra vista originalmente: La clase WebUser. Detrás de escena, ASP.NET MVC ahora procesa el formulario y asigna los valores encontrados en sus controles editables a las propiedades de la clase WebUser. ¡Esta es la magia de Model Binding!

Resumen

Gracias al Model Binding, puedes mantener las relaciones entre tus modelos y sus vistas mucho más fácil. En este artículo sólo hemos arañado la superficie - hay muchas más posibilidades con Model Binding, cómo lo descubrirás en algunos de los siguientes artículos.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!