使用BeginForm和DropDownList传递选定的值

时间:2015-03-02 12:06:32

标签: c# asp.net asp.net-mvc

所以,我试图通过DropDownList和BeginForm传递所选的多选值。不想传递javascript / ajax。选择的插件工作正常,向我显示我想要的条目。但我在控制器上获取空值:

模型

public class SorteioEspecial
{
    RepositoryService service = new RepositoryService();

    public SorteioEspecial()
    {
        funcionario = new List<Funcionario>();
        ponderacaoFuncionario = new List<PonderacaoFuncionario>();
        SelectedIds = new List<int>();

    }

    public int Id { get; set; }
    public IEnumerable<Funcionario> funcionario { get; set; }
    public IEnumerable<PonderacaoFuncionario> ponderacaoFuncionario { get; set; }
    public List<int> SelectedIds { get; set; }

    public IEnumerable<Funcionario> GetFuncionarios()
    {
        funcionario = service.GetFuncionarios();
        return funcionario;
    }

    public IEnumerable<PonderacaoFuncionario> GetPonderacaoFuncionario()
    {
        ponderacaoFuncionario = service.GetPonderacaoFuncionario();
        return ponderacaoFuncionario;
    }


}

控制器

[HttpGet]
    public ActionResult EscolherFuncionarios()
    {
        var sorteioEspecial = new SorteioEspecial();
        List<Funcionario> list = new List<Funcionario>();
        list = sorteioEspecial.GetFuncionarios().ToList().OrderBy(x => x.Nome).ToList();
        ViewBag.FuncionarioId = new SelectList(list, "Id", "Nome");
        return View(sorteioEspecial);
    }

    [HttpPost]
    public ActionResult EscolherFuncionarios(List<int> SelectedIds)
    {
        return View();
    }

查看

    @model Apdd.Models.SorteioEspecial

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}


    <h2>Escolha os funcionários a ir a sorteio</h2>

@using (Html.BeginForm())
{
    @Html.DropDownList("FuncionarioId", null, htmlAttributes: new { @class = "chosen-select", @data_placeholder = "Pick one!", @multiple = "true" })

    <input type="submit" value="save" />
}

<script src="~/Scripts/jquery-2.1.1.js"></script>
<script src="~/Scripts/jquery.js"></script>
<script src="~/Scripts/chosen.proto.js"></script>
<link href="~/Scripts/chosen.css" rel="stylesheet" />
<script src="~/Scripts/chosen.jquery.js"></script>
<script>
    $(".chosen-select").chosen({
        disable_search_threshold: 10,
        no_results_text: "None!",
        width: "95%"
    });
</script>

ViewBag中的值是实体列表(Id,Name和更多参数),对于我一直在看的内容,所选择的只传递了Id,正是我想要的。我需要做什么才能将值传递给控制器​​?

2 个答案:

答案 0 :(得分:0)

首先,所选项目将以逗号分隔的字符串形式发布,因此您需要将您的下拉列表与字符串属性绑定。

其次,您的下拉列表名称为FuncionarioId,因此当您在操作中有参数FormCollection

时,它会在List<int>的密钥中发布

如果您更改了操作签名并签入了表单集合,则会在FormCollection中找到逗号分隔值:

[HttpPost]
public ActionResult EscolherFuncionarios(FormCollection form)
{
   string selectedValues = form["FuncionarioId"];
   return View();
}

您还可以参考this article of Rick Anderson where he explained how to use Multi Select

答案 1 :(得分:0)

值被发布到控制器,bot问题是控制器参数绑定,因为参数和下拉列表中的名称不同。如果从&#34; SelectedIds&#34;更改控制器参数列表的名称。下拉列表名称&#34; FuncionarioId&#34;它应该工作。 所以改变这个:

[HttpPost]
public ActionResult EscolherFuncionarios(List<int> SelectedIds)
{
    return View();
}

到此:

 [HttpPost]
 public ActionResult Test(List<int> FuncionarioId)
 {
    return View();  
 }