MVC 3 Layout Page, Razor Template, and DropdownList

后端 未结 1 1389
囚心锁ツ
囚心锁ツ 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<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");
            }
        }
    }
    

    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:

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

    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)
提交回复
热议问题