vista tutorial paso net mvc modelo form ejemplos controlador asp asp.net-mvc asp.net-mvc-3

asp.net mvc - tutorial - Página de diseño de MVC 3, plantilla de rastrillo y lista desplegable



mvc ejemplos (1)

Quiero incluir una lista desplegable de años en todas las páginas de mi sitio web. Supuse que era un buen lugar para poner esta lógica en la página de diseño (_layout.cshtml). Si un usuario cambia el año, quiero cambiar también la sesión de mi año (ModelBinder). Esto fue muy fácil de hacer con los formularios web ASP.NET, pero parece casi imposible de hacer en MVC. Intenté una vista parcial sin suerte. ¿Alguien tiene ideas?


Como de costumbre, puede comenzar definiendo un modelo de vista:

public class YearsViewModel { public string Year { get; set; } public IEnumerable<SelectListItem> Years { get { return new SelectList( Enumerable.Range(1900, 112) .OrderByDescending(year => year) .Select(year => new SelectListItem { Value = year.ToString(), Text = year.ToString() } ), "Value", "Text"); } } }

Entonces un controlador:

public class YearsController : Controller { public ActionResult Index() { return View(new YearsViewModel()); } [HttpPost] public ActionResult Index(int year) { // TODO: do something with the selected year return new EmptyResult(); } }

y una vista correspondiente para la acción de índice:

@model SomeAppName.Models.YearsViewModel @{ Layout = null; } @Html.DropDownListFor(x => x.Year, Model.Years)

Y finalmente dentro de su _Layout.cshtml puede usar este controlador:

<div id="selectyear">@Html.Action("index", "years")</div>

y adjunte una secuencia de comandos correspondiente que enviaría una solicitud AJAX cuando el valor cambie:

$(function () { $(''#selectyear select'').change(function () { $.post(''@Url.Action("index", "years")'', { year: $(this).val() }, function (result) { }); }); });