asp.net-mvc - MVC 3布局页面,Razor模板和DropdownList

标签 asp.net-mvc asp.net-mvc-3

我想在我网站的所有页面中包括年份的下拉列表。我认为放置此逻辑的好地方是在布局页面(_layout.cshtml)中。如果用户更改了年份,我也想更改我的年份 session (ModelBinder)。使用ASP.NET Web表单是如此容易,但是在MVC中似乎几乎不可能做到。我尝试了部分观点,没有运气。有人有什么想法吗?

最佳答案

像往常一样,您可以从定义 View 模型开始:

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

然后是一个 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();
    }
}

以及索引操作的相应 View :
@model SomeAppName.Models.YearsViewModel
@{
    Layout = null;
}
@Html.DropDownListFor(x => x.Year, Model.Years)

最后在_Layout.cshtml中,您可以使用以下 Controller :
<div id="selectyear">@Html.Action("index", "years")</div>

并附加一个相应的脚本,当值更改时,该脚本将发送AJAX请求:
$(function () {
    $('#selectyear select').change(function () {
        $.post('@Url.Action("index", "years")', { year: $(this).val() }, function (result) {

        });
    });
});

关于asp.net-mvc - MVC 3布局页面,Razor模板和DropdownList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4674033/

相关文章:

c# - 找不到类型或命名空间名称 'T'

jquery - 迭代数组和非数组的 jQuery 对象

asp.net-mvc - asp.net mvc Controller 帖子最佳实践

asp.net-mvc - 如何选择下拉列表值并在mvc3中显示?

c# - Sitefinity 8.1 自定义 MVC 路由不起作用

Asp.NET 论坛和博客共享成员(member)资格

c# - 可切换数据访问层的结构

asp.net-mvc - 谷歌 aspnet mvc5 上的 AuthenticationManager.GetExternalLoginInfoAsync() 返回 null

c# - Linq orderby 文化(丹麦语,æøå)

asp.net-mvc-3 - CaSTLe Windsor 组件依赖性和生活方式