sql - 在添加到数据库之前检查重复项
问题描述
我有一个带有品牌名称的简单数据库。这是我的模型课:
品牌.cs
[Key]
public int BrandID { get; set; }
[Required(ErrorMessage = "Enter Brandname")]
[Display(Name = "Brandname")]
[StringLength(30)]
public string BrandName { get; set; }
在 SQL 数据库中发布新品牌名称的控制器部分如下所示。
Brandscontroller.cs
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("BrandID,BrandName")] Brand brand)
{
if (ModelState.IsValid)
{
_context.Add(brand);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(brand);
}
当他添加一个已经在数据库中的品牌名称时,如何防止或向用户发出信号?
解决方案
您可以使用[Remote]
验证来检查 BrandName 是否存在,然后显示验证消息。
参考以下代码:
public class Brand
{
[Key]
public int BrandID { get; set; }
[Required(ErrorMessage = "Enter Brandname")]
[Display(Name = "Brandname")]
[StringLength(30)]
[Remote("IsAlreadyExist", "Home", HttpMethod = "POST", ErrorMessage = "BrandName already exists in database.")]
public string BrandName { get; set; }
}
控制器:
public IActionResult CreateBrand()
{
return View();
}
[HttpPost]
public async Task<IActionResult> CreateBrand(Brand brand)
{
//insert the brand to the database
if (ModelState.IsValid)
{
_context.Add(brand);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(brand);
}
[HttpPost]
public async Task<IActionResult> IsAlreadyExist(string brandname)
{
//check whether the brandname is exists in the database.
if (_context.Brands.Any(x => x.BrandName == brandName))
{
return Json(false); //the brand name exists in the database.
}
return Json(true);
}
查看页面:
@model WebApplication6.Models.Brand
@{
ViewData["Title"] = "CreateBrand";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="row">
<div class="col-md-4">
<form asp-action="CreateBrand">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="BrandName" class="control-label"></label>
<input asp-for="BrandName" class="form-control" />
<span asp-validation-for="BrandName" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
结果如下:
更多详细信息,请参见[Remote] 属性。
推荐阅读
- encapsulation - 将变量设置为私有时会发生什么?
- javascript - 如何在 JavaScript 中将“原始”字节写入浏览器?
- angular - Angular / Typescript将带有Promise的方法转换为Observable
- json - 更改json中的数据名称
- sql-server - IIS - 错误:无法识别的属性“configBuilders”
- python - Python GPIO列表循环,但不要等待完成
- spss - 识别数据中的异常值
- php - 到 authorize.net 的 cUrl 帖子在 80% 的情况下返回空
- java - 在 Java 中,如何确保布尔标志的安全和一致的并发使用,同时最大限度地减少时间性能影响?
- javascript - 将 Express 服务器部署到 Firebase 问题