使用数组填充DropDown

时间:2014-12-11 11:44:55

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

我需要使用从SOAP服务器获取的一些数据来填充下拉列表。服务器为我提供了一系列公司。

我如何使用它来填充DD?

这是我的用户类:

public class Usuario
{
    public string Nome { get; set; }
    public string Token { get; set; }
    public IEnumerable<SelectListItem> Unidades { get; set; }
}

以下是我收到公司并将其发送到视图的地方,我从另一个重定向到此Action的{​​{1}}获取该信息:

Action

以下是我试图展示它的方式:

var usuario = TempData["objUsuario"] as UsuarioSSO;

if (usuario == null) return RedirectToAction("Index", "Login");

if (usuario.UsuarioUnidades == null)
{
    ModelState.AddModelError("", "Usuário não possui unidades");

    return View();
}

var model = new Models.Usuario
{
    Unidades = usuario.UsuarioUnidades.ToList().Select(x => new SelectListItem
    {
        Value = x.CodigoEmitente.ToString(),
        Text = x.NomeFantasia
    })
};

return View(model);

我已经尝试了所有的东西,但它没有工作,我得到一些转换错误,当我能使它工作时它不会显示内容,它只会显示{{内部的对象1}}区域

@Html.DropDownListFor(x => x.Unidades, new SelectList(Model.Unidades))

2 个答案:

答案 0 :(得分:4)

您需要为所选项目和可用项目列表提供一个属性,例如:

public class Usuario
{
    public string Nome { get; set; }
    public string Token { get; set; }
    public string Unidade { get; set; }
    public IEnumerable<SelectListItem> Unidades { get; set; }
}

然后创建下拉列表:

@Html.DropDownListFor(x => x.Unidade, Model.Unidades)

您可以直接提供Unidades,因为它已经IEnumerable<SelectListItem>

P.S。:我猜到Unidades的单数,因为我不会说你的语言,不管它是什么。我建议总是在源代码中使用英语。

答案 1 :(得分:4)

您的模型需要值类型属性才能将所选选项绑定到。如果CodigoEmitente的类型为int,那么您的模型属性需要

public int SelectedUnidades { get; set; }

您需要将SelectList分配给视图模型中的其他媒体资源或ViewBag媒体资源

ViewBag.UnidadesList = new SelectList(usuario.UsuarioUnidades, "CodigoEmitente", "NomeFantasia");

然后在视图中

@Html.DropDownListFor(x => x.SelectedUnidades, (SelectList)ViewBag.UnidadesList)