Estou fazendo um projeto de biblioteca para treinar e queria saber como posso fazer o form de cadastro de emprestimo que contem os dados(livroID, usuarioID, dataEmprestimo, dataDevolucao). Quero fazer um dropdown com o nome dos Livros cadastrados e outro com os nomes dos usuarios cadastrados e pegar o ID ao inves do nome. Estou tentando fazer isso com ViewModel mas nao sei se estou no caminho certo. Se alguem puder me dar uma luz agradeco. Vou deixar o codigo do controller, da view, do model e da viewmodel aqui. Model
public class Emprestimos
{
public int Id { get; set; }
public Livros Livro { get; set; }
public Usuarios Usuario { get; set; }
public DateTime DataEmprestimo { get; set; }
public DateTime DataDevolucao { get; set; }
public Emprestimos()
{
}
public Emprestimos(int id, Livros livro, Usuarios usuario, DateTime dataEmprestimo, DateTime dataDevolucao)
{
this.Id = id;
this.Livro = livro;
this.Usuario = usuario;
this.DataEmprestimo = dataEmprestimo;
this.DataDevolucao = dataDevolucao;
}
}
ViewModel
public class EmprestimoViewModel
{
public List<Livros> Livros { get; private set; }
public List<Usuarios> Usuarios { get; private set; }
public int livroId { get; private set; }
public int usuarioId { get; private set; }
public DateTime DataEmprestimo { get; private set; }
public DateTime DataDevolucao { get; private set; }
public EmprestimoViewModel(List<Livros> livros, List<Usuarios> usuarios)
{
this.Livros = livros;
this.Usuarios = usuarios;
}
}
Controller
public IActionResult Cadastro()
{
EmprestimoViewModel viewModel = GetEmprestimoViewModel();
return View(viewModel);
}
private EmprestimoViewModel GetEmprestimoViewModel()
{
List<Livros> livros = this._dataService.GetLivros();
List<Usuarios> usuarios = this._dataService.GetUsuarios();
EmprestimoViewModel viewModel = new EmprestimoViewModel(livros, usuarios);
return viewModel;
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Cadastro(Emprestimos emprestimo)
{
if (ModelState.IsValid)
{
this._dataService.AddEmprestimo(emprestimo);
return RedirectToAction("Lista");
}
else
{
return View();
}
}
View
@model Library.Models.ViewModels.EmprestimoViewModel
<h1>Cadastro de Emprestimo</h1>
<form role="form" method="post" asp-action="cadastro">
<div class="form-group">
<label class="control-label" for="Livro">Livro</label>
<select class="form-control" id="Livro" asp-for="livroId">
@foreach (var livro in Model.Livros)
{
<option value="@livro.Id">@livro.Nome</option>
}
</select>
</div>
<div class="form-group">
<label class="control-label" for="Usuario">Usuario</label>
<select class="form-control" id="Usuario" asp-for="usuarioId">
@foreach (var usuario in Model.Usuarios)
{
<option value="@usuario.Id">@usuario.Nome</option>
}
</select>
</div>
<div class="form-group">
<label class="control-label" for="data_emprestimo">Data Emprestimo</label>
<input type="date" class="form-control" id="DataEmprestimo" asp-for="DataEmprestimo">
</div>
<div class="form-group">
<label class="control-label" for="data_devolucao">Data Devolucao</label>
<input type="date" class="form-control" id="DataDevolucao" asp-for="DataDevolucao">
</div>
<button type="submit" class="btn btn-success">Cadastrar Emprestimo</button>
</form>