【问题标题】:MVC 5 DropDown ListsMVC 5 下拉列表
【发布时间】:2016-10-22 00:33:12
【问题描述】:

因此,我正在使用一些控件自定义一些视图,以允许用户缩小我们期望在页面上看到的结果,因为我们期望得到大量信息。

我的智能感知在 VS2015 中被破坏了,所以我在黑暗中磕磕绊绊。

所以我已经填充了几个下拉列表,月份和年份。不是最漂亮的,但它有效:

@Html.DropDownList("Month", new List<SelectListItem>
           {
                new SelectListItem { Text = "January", Value = "1"},
                new SelectListItem { Text = "February", Value = "2"},
                new SelectListItem { Text = "March", Value = "3"},
                new SelectListItem { Text = "April", Value = "4"},
                new SelectListItem { Text = "May", Value = "5"},
                new SelectListItem { Text = "June", Value = "6"},
                new SelectListItem { Text = "July", Value = "7"},
                new SelectListItem { Text = "August", Value = "8"},
                new SelectListItem { Text = "September", Value = "9"},
                new SelectListItem { Text = "October", Value = "10"},
                new SelectListItem { Text = "November", Value = "11"},
                new SelectListItem { Text = "December", Value = "12"}
           }, "Month")
           @Html.DropDownList("Year", new List<SelectListItem>
            {
                new SelectListItem { Text = Convert.ToString(DateTime.Now.Year - 1), Value = Convert.ToString(DateTime.Now.Year - 1)},
                new SelectListItem { Text = Convert.ToString(DateTime.Now.Year), Value = Convert.ToString(DateTime.Now.Year), Selected = true},
                new SelectListItem { Text = Convert.ToString(DateTime.Now.Year + 1), Value = Convert.ToString(DateTime.Now.Year + 1)},
            }, "Year")

现在,当其中一个下拉列表发生更改时,我想将两个控件的下拉选择发送到此视图的控制器,其中包含 DD 列表的内容。从那里我可以重新加载页面。 MSDN 文档不清楚,因为 DropDownList 的唯一构造函数没有参数,所以我不清楚事件驱动的东西应该放在哪里。

【问题讨论】:

  • 不清楚你在问什么——如果它们在一个表单中,选择的值将被发布到你的控制器但是你的意思是什么与DD列表的内容? (不,它的不是最漂亮的 - 它很糟糕)。你指的是什么事件驱动的东西
  • “不,它不是最漂亮的——它太糟糕了”——谢谢你把它揉进去。我很清楚它现在有多丑。

标签: asp.net razor asp.net-mvc-5


【解决方案1】:

处理此用例的一种方法是将您的 SELECT 元素保留在 form 中,并在选择元素上发生更改事件时提交。

@using (Html.BeginForm("Index","Home",FormMethod.Get))
{
  <!-- your existing code for SELECT elements goes here-->
}

现在您可以在 SELECT 元素上监听 change 事件并提交最接近的表单。

$(function () {

    $("#Year,#Month").change(function() {
        $(this).closest("form").submit();
     });

});

假设 Index 操作方法接受年份和月份作为参数

public ActionResult Index(int? year,int? month)
{
  // Check the year and month values, if not null, use them to filter your data
  // to do  : Return something
}

【讨论】:

    【解决方案2】:

    用表单标签包装元素(发布操作)。

    在服务器端创建具有月份和年份参数的模型,例如:

    public class MyModel{
        public string Month {get;set;}
        public string Year {get;set;}
    }
    

    你的 html 必须是这样的:

       @using (Html.BeginForm("Index", "Home", FormMethod.POST, new { id = "MyForm" })) 
        {
           @Html.DropDownList("Month", *your data*, "select month",   new{ onchange = "document.getElementById('MyForm').submit();" })
    
           @Html.DropDownList("Year", *your data*, "select year",   new{ onchange = "document.getElementById('MyForm').submit();" })
    
           <input type='submit' value='make the magic' />
        } 
    

    这一行是绑定你的下拉列表的更改事件,通过 id 找到你的表单并提交它。

    new{ onchange = "document.getElementById('MyForm').submit();"

    【讨论】:

    • Severside 已经有一个数据模型,我应该如何处理向视图添加另一个数据模型?
    • 使用 js,您可以提交任何表单或少量表单...您可以将任何输入放入具有唯一 ID 的另一个表单中,并在任何输入更改时提交...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多