如何在用户提供输入时验证唯一的 属性(.Net 中的代码优先方法,MVC5)?

How to validate a unique property while user giving input (code first approach in .Net, MVC5)?

型号Class:

public class Course
{
    [Key]
    public int Id { get; set; }

    [MinLength(5, ErrorMessage = "Code must be (5) characters long")]
    [Index(IsUnique = true)]
    [Column(TypeName = "VARCHAR")]
    [Required]
    [Display(Name = "Code")]
    public string CourseCode { get; set; }

    [Index(IsUnique = true)]
    [Column(TypeName = "VARCHAR")]
    [Required]
    [Display(Name = "Name")]
    [Remote("IsCourseNameExist", "Courses", HttpMethod = "POST", ErrorMessage = "Course is existed.")]
    public string CourseName { get; set; }

    //[System.ComponentModel.DataAnnotations.Compare("CourseName", ErrorMessage = "Already this Course is exist.")]
    //[NotMapped]
    //public string VeryfyName { get; set; }

    [Range(0.5, 5, ErrorMessage = "Credit Must be between (0.5) to (5.0)")]
    [Display(Name = "Credit")]
    public decimal CourseCredit { get; set; }

    public string Description { get; set; }
    public int DepartmentId { get; set; }
    public int SemesterId { get; set; }

    [ForeignKey("DepartmentId")]
    public virtual Department Department { get; set; }
    [ForeignKey("SemesterId")]
    public virtual Semester Semester { get; set; }

}

在控制器中 Class:

public JsonResult IsCourseNameExist(string CourseName)
    {
        //var course = .....
        return Json(course == null);
    }

在视图中:

<div class="form-group">
        @Html.LabelFor(model => model.CourseName, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.CourseName, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.CourseName, "", new { @class = "text-danger" })
        </div>
    </div>

描述: 我正在使用 Code First EF 并且在这方面非常新。 我有一个模型 class "Course",它生成了一个名为 "Courses" 的数据库 table。 在视图中,用户将为选定的部门和学期添加课程。但是课程名称 属性 是 unique.If 用户输入一个课程名称已经存在于 "Courses" table 并提交按钮,然后会产生一些错误。这就是为什么我要确认用户不能输入任何现有的课程名称。所以提交前需要检查。

我搜索了很多,因为我是新手,一切对我来说都不是很清楚。我找到了一种在模型 class 中使用 [Remote()] 的方法,然后在控制器中使用一个动作来解决这个问题。但是不能应用它。

我希望能简要了解如何编写我在 Controller class 中提到的代码以及需要在视图中添加哪些其他内容。

谢谢!

您可以将条件语句与 .Any() lambda 表达式结合使用。

public JsonResult IsCourseNameExist(string CourseName)
{
    if(dbContext.Courses.Any(x => x.CourseName.Trim().ToUpper().Equals(CourseName.Trim().ToUpper())
    {
        return Json(false);
    }
    else
    {
        return Json(true);
    }
}

使用 .ToUpper() 将有助于提高效率,因为如果您的 table 您有一个名为 Math 101 的课程名称,并且用户输入 math 101可能会无误地提交。

如果有帮助请告诉我。