asp.net-mvc – MVC 3布局页面,Razor模板和下拉列表

我想在我的网站的所有页面包括一个下拉列表的年。我假设一个好的地方放这个逻辑是在布局页面(_layout.cshtml)。如果用户更改我想要更改年会话(ModelBinder)的年份,也要更改。这是很容易做ASP.NET web表单,但似乎几乎不可能做到在MVC。我试着没有运气的局部视图。任何人有任何想法?

解决方法

像往常一样,你可以从定义视图模型开始:
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");
        }
    }
}

然后一个控制器:

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

以及索引操作的相应视图:

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

最后在你的_Layout.cshtml里面你可以使用这个控制器:

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

并附加相应的脚本,当值发生更改时,将发送AJAX请求:

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

        });
    });
});

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....