Usar @model e @model IEnumerable<> na mesma View [RESOLVIDO]

estou criando uma especie de crud web e estou criando em ASP.Net Core EntityFramework, e estou tentando carregar um dropdowlist com os dados do banco para salvar os dados em outra tabela do banco. o problema e que não consigo usar o @model e @model IEnuberable<> na mesma View. qual seria a forma correta para carregar esses dados no dropdownlist?

Esse e o controller

  private readonly AcsContext _context;

    public UsuarioController(AcsContext Context)
    {
        _context = Context;
    }

    public async Task<IActionResult> Index()
    {
        ViewBag.Usuario = _context.Empresas;

        return View(await _context.Usuarios.ToListAsync());
    }

    [HttpGet]
    public IActionResult Cadastrar()
    {
        return View();
    }

View

 <div class="row col-lg-12">
            <div class="col-lg-3">
                <div class="form-group">
                    <label>Tipo Usuario</label>

                    <select asp-for="TipoUsuarioId">
                        @foreach (var item in Model)
                        {
                            <option>@item.Descricao</option>
                        }
                    </select>

                    @*<input asp-for="TipoUsuarioId" type="text" class="form-control" />*@
                    <span asp-validation-for="TipoUsuarioId" class="text-danger"></span>
                </div>
            </div>

Tem duas formas de resolver isso

1 - Criando uma ViewModel que conterá as duas informações e na sua View você passar na configuração @model Nome_da_View_Model, exemplo:

public class ViewModel 
{
    public People People { get; set ;}
    public List<Phones> Phones { get; set; }
}

Passa os dois valores para ela e envia ela no

var model = new ViewModel();
model.People = // o valor de people
model.Phones = // a lista de telefones
return view(model)

2 - Também tem uma forma bem direta, se você utilizar @Html.DropDownList pode ser enviado um dado ViewBag e o mesmo nome para sua, algo assim:

  • Controller

    ViewBag.Items = new SelectedList(phones, "id", "description");
    return view();
    
  • View

    @Html.DropDownList("Items")
    

que automaticamente ele vai carregar as informações nessa Select.

Um exemplo claro

1 curtida

Valeu fiz mais o menos como você explicou no 2º exemplo.

ficou dessa forma

[HttpGet]
public IActionResult Cadastrar()
{
        Usuario Usuario = new Usuario();
        ViewData["ListaUsuario"] = 
           new SelectList(_context.TiposUsuarios, "Id", "Descricao", 
                               Usuario.TipoUsuarioId);
        return View();
    }

<select asp-for="TipoUsuarioId" asp-items="ViewBag.ListaUsuario" class="form-control">
</select>
1 curtida