所以,我试图通过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,正是我想要的。我需要做什么才能将值传递给控制器?
答案 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();
}