MVC 3 Layout Page, Razor Template, and DropdownList

后端 未结 1 1402
囚心锁ツ
囚心锁ツ 2020-11-28 18:51

I want to include a drop down list of years across all the pages in my website. I assumed a good place to put this logic was in the layout page (_layout.cshtml). If a user c

1条回答
  •  星月不相逢
    2020-11-28 19:37

    As usual you could start by defining a view model:

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

    Then a controller:

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

    and a corresponding view for the index action:

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

    And finally inside your _Layout.cshtml you could use this controller:

    @Html.Action("index", "years")

    and attach a corresponding script which would send an AJAX request when the value changes:

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

    0 讨论(0)
提交回复
热议问题