Impedir que o usuário digite várias vezes o mesmo registro no cadastro em ASP.NET MVC Core 2.0 com SQL Server

03/08/2018

8

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.
Responder

Posts

03/08/2018

Elias Ribeiro

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.
Responder
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 />
}
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar