如何在用户提供输入时验证唯一的 属性(.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
可能会无误地提交。
如果有帮助请告诉我。
型号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
可能会无误地提交。
如果有帮助请告诉我。