【问题标题】:HTML.DropDownListFor not passing parameter to controller?HTML.DropDownListFor 不将参数传递给控制器​​?
【发布时间】:2020-09-15 10:45:36
【问题描述】:

我现在正在尝试过滤我的视图几个小时。这就是我所拥有的: 我的观点:

@using (Html.BeginForm("Index", "RH_CentroCusto", FormMethod.Get))
{
   @Html.DropDownListFor(f => f.DepartmentoSelecionado , Model.Departamentos, "Select")
}

在我的模型类中:

 public IEnumerable<SelectListItem> Departamentos { get; set; }
 public string DepartmentoSelecionado { get; set; }

我的控制器:

//i want to receive the value in departamentoSelecionado !!
 public IActionResult Index( string searchString, string departamentoSelecionado = "", int page = 1)
     
     
            List<SelectListItem> selectList = new List<SelectListItem>();

            foreach (var x in _context.RH_Departamento.ToList())
            {
                selectList.Add(new SelectListItem() { Text = x.Departamento , Value = x.Departamento           });
            }

//and then i add to the viewModel that i create the list
        ViewModelCentroCusto vmcc = new ViewModelCentroCusto()
            {  
                   Departamentos = selectList
            }

当我尝试选择一个并单击回车时,它应该正在传递,因为在我的浏览器中我检查了它并且它正在传递查询参数:

但在我的控制器中,我的 departamentoSelecionado 为空,下拉列表也再次获得“选择”,而不是保留我之前选择的内容!任何帮助表示赞赏!

【问题讨论】:

    标签: asp.net-core model-view-controller filter html.dropdownlistfor


    【解决方案1】:

    departamentoSelecionado 更改为 departmentoSelecionado 。您在 departmentoSelecionado 中拼写了一个额外的字母 a

    //public IActionResult Index( string searchString, string departamentoSelecionado = "", int page = 1)
      public IActionResult Index( string searchString, string departmentoSelecionado = "", int page = 1)
    

    action方法中的参数要和f =&gt; f.DepartmentoSelecionado一样。




    2020 年 9 月 16 日更新

    控制器代码

    public class RH_CentroCustoController : Controller
    {
       
        //i want to receive the value in departamentoSelecionado !!
        public IActionResult Index(string searchString, string departmentoSelecionado ="", int page = 1)
        {
            List<SelectListItem> selectList = new List<SelectListItem>();
    
            IList<RH_Departamento> RH_Departamento = new List<RH_Departamento>(){
                new RH_Departamento(){ Departamento="dep1" },
                new RH_Departamento(){ Departamento="dep2" },
                new RH_Departamento(){ Departamento="dep3" },
            };//just for test 
            //foreach (var x in _context.RH_Departamento.ToList())
            foreach (var x in RH_Departamento.ToList())
            {
                selectList.Add(new SelectListItem() { Text = x.Departamento, Value = x.Departamento });
            }
    
            //and then i add to the viewModel that i create the list
            ViewModelCentroCusto vmcc = new ViewModelCentroCusto()
            {
                Departamentos = selectList
            };
    
            return View(vmcc);
        }
    }
    

    视图代码

    @model xxx.Models.ViewModelCentroCusto
    @{
        Layout = null;
    }
    
    @using (Html.BeginForm("Index", "RH_CentroCusto", FormMethod.Get))
    {
        @Html.DropDownListFor(f => f.DepartmentoSelecionado, new SelectList(Model.Departamentos, "Value", "Text"), "Select");
        <input type="submit" value="Save" />
    }
    

    型号代码

    public class ViewModelCentroCusto
    {
        public IEnumerable<SelectListItem> Departamentos { get; set; }
        public string DepartmentoSelecionado { get; set; }
    }
    
    public class RH_Departamento
    {
        public string Departamento { get; set; }
    }
    

    测试

    【讨论】:

    • 天啊,我不知道我是怎么错过的! xD 感谢您的帮助,很抱歉,但我没有收到任何通知...:/ 非常感谢!谢谢! :D
    • 顺便说一句,此代码有效,但是当我选择我的选择时,我希望它立即提交表单!现在这不会发生!我是 asp.net 的新手,但我仍然没有阅读任何相关内容,但如果你给我一些信息,我将不胜感激! :)
    • 您的代码中存在一些错误。并将更新上面的代码。
    • 你的代码不是和我的一样吗?我没有收到任何错误,我看不出你的代码和我的代码有什么不同! :/ 顺便说一句,你能做到吗,但不是使用按钮,而是在选择时立即提交?这样如果我选择一个它就会立即过滤!?感谢您给予伙伴的巨大帮助! :)
    • 试试这个@Html.DropDownListFor(m =&gt; m.DepartmentoSelecionado, new SelectList(Model.Departamentos, "Value", "Text"), "Select", new { onchange = "this.form.submit();" });
    猜你喜欢
    • 2018-07-14
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多