首页 > 解决方案 > 在添加到数据库之前检查重复项

问题描述

我有一个带有品牌名称的简单数据库。这是我的模型课:

品牌.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);
}

当他添加一个已经在数据库中的品牌名称时,如何防止或向用户发出信号?

标签: sqlasp.net-mvcasp.net-core

解决方案


您可以使用[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] 属性


推荐阅读