33 votes

Page de présentation MVC 3, modèle de rasoir et liste déroulante

Je souhaite inclure une liste déroulante d'années sur toutes les pages de mon site Web. J'ai supposé qu'un bon endroit pour mettre cette logique était dans la page de disposition (_layout.cshtml). Si un utilisateur change l'année, je souhaite également modifier ma session d'année (ModelBinder). C'était si facile à faire avec les formulaires Web ASP.NET, mais cela semble presque impossible à faire dans MVC. J'ai essayé une vue partielle sans succès. Quelqu'un a des idées?

88voto

Darin Dimitrov Points 528142

Comme d'habitude, vous pouvez commencer par définir un modèle de vue:

 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");
        }
    }
}
 

Puis un contrôleur:

 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();
    }
}
 

et une vue correspondante pour l'action index:

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

Et enfin, dans votre _Layout.cshtml vous pouvez utiliser ce contrôleur:

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

et attachez un script correspondant qui enverrait une demande AJAX lorsque la valeur changerait:

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

        });
    });
});
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X