Impedir que o usuário digite várias vezes o mesmo registro no cadastro em ASP.NET MVC Core 2.0 com SQL Server
Tenho uma aplicação ASP.NET MVC Core 2.0 usando banco de dados SQL Server. Tenho um cadastro básico de combustíveis. Exemplo: Alcool, Gasolina, Diesel, etc...
Quero impedir que o usuário grave dois registros duplicados, por exemplo Alcool mais de uma vez no banco.
Estou tentando por DataAnnotations marcar o campo como Unique, que dai o banco não aceitaria esse registro duplicado. Essa seria minha primeira opção.
Minha segunda opção, na Controller de Combustiveis criei uma validação se o Combustível já foi registrado, mas não consegui ainda mostrar a mensagem na tela de cadastro. O registro não é salvo, mas não mostra nenhuma mensagem para o usuário.
Podem me ajudar a restringir esse registro duplicado? Mesmo que seja uma opção diferente das que coloquei acima, o importante seria mostrar uma mensagem para o usuário e impedir essa duplicidade de cadastro.
Quero impedir que o usuário grave dois registros duplicados, por exemplo Alcool mais de uma vez no banco.
Estou tentando por DataAnnotations marcar o campo como Unique, que dai o banco não aceitaria esse registro duplicado. Essa seria minha primeira opção.
Minha segunda opção, na Controller de Combustiveis criei uma validação se o Combustível já foi registrado, mas não consegui ainda mostrar a mensagem na tela de cadastro. O registro não é salvo, mas não mostra nenhuma mensagem para o usuário.
Podem me ajudar a restringir esse registro duplicado? Mesmo que seja uma opção diferente das que coloquei acima, o importante seria mostrar uma mensagem para o usuário e impedir essa duplicidade de cadastro.
Rodolfo Camargo
Curtidas 0
Respostas
Elias Ribeiro
03/08/2018
Boa tarde tudo bem?
Tenta modificar o banco deixando o atributo como unique.
E coloca um try catch personaliza a msg de erro falando que o item ja esta cadastro.
Tenta modificar o banco deixando o atributo como unique.
E coloca um try catch personaliza a msg de erro falando que o item ja esta cadastro.
GOSTEI 0
Rodolfo Camargo
03/08/2018
Conseguir fazer usando ModelState.AddModelError<br />
<br />
[HttpPost]<br />
[ValidateAntiForgeryToken]<br />
public async Task<IActionResult> Create([Bind("Id,Nome")] Combustivel combustivel)<br />
{<br />
if (_context.Combustivel.Any(c => c.Nome == combustivel.Nome))<br />
{<br />
ModelState.AddModelError("Nome", $"Esse Combustível já está registrado.");<br />
} <br />
<br />
if (ModelState.IsValid)<br />
{<br />
combustivel.Id = Guid.NewGuid();<br />
_context.Add(combustivel);<br />
await _context.SaveChangesAsync();<br />
return RedirectToAction(nameof(Index));<br />
}<br />
return View(combustivel);<br />
}
<br />
[HttpPost]<br />
[ValidateAntiForgeryToken]<br />
public async Task<IActionResult> Create([Bind("Id,Nome")] Combustivel combustivel)<br />
{<br />
if (_context.Combustivel.Any(c => c.Nome == combustivel.Nome))<br />
{<br />
ModelState.AddModelError("Nome", $"Esse Combustível já está registrado.");<br />
} <br />
<br />
if (ModelState.IsValid)<br />
{<br />
combustivel.Id = Guid.NewGuid();<br />
_context.Add(combustivel);<br />
await _context.SaveChangesAsync();<br />
return RedirectToAction(nameof(Index));<br />
}<br />
return View(combustivel);<br />
}
GOSTEI 0