Entity framework 唯一字段mvc的客户端验证

Entity framework 唯一字段mvc的客户端验证,entity-framework,asp.net-mvc-4,unobtrusive-validation,Entity Framework,Asp.net Mvc 4,Unobtrusive Validation,我需要为我的字段执行唯一的验证检查 [Key] [Required] [DisplayName("Tag")] public string Tag { get; set; } 错误:此标记已存在 为此,您可以使用远程验证规则。将此规则添加到标记字段中。您的新代码将被删除 [Key] [Required] [DisplayName("Tag")] [Remote("IsTagAvailble", "MyController", ErrorMessage = "Tag Already Exis

我需要为我的字段执行唯一的验证检查

[Key]
[Required]
[DisplayName("Tag")]
public string Tag { get; set; }  

错误:此标记已存在

为此,您可以使用远程验证规则。将此规则添加到标记字段中。您的新代码将被删除

[Key]
[Required]
[DisplayName("Tag")]
[Remote("IsTagAvailble", "MyController", ErrorMessage = "Tag Already Exist.")]
public string Tag { get; set; }
第一个参数是操作名称,第二个参数是控制器名称,第三个参数是要显示给用户的错误文本。 现在在控制器中定义此新操作,例如示例中的MyController

public class MyController : Controller
{
    public ActionResult IsTagAvailble(string Tag)
    {
        using (DataBaseContext db = new DataBaseContext())
        {
            try
            {
                var tag = db.TABLE_NAME.Single(m => m.Tag == Tag);
                return Json(false, JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                return Json(true, JsonRequestBehavior.AllowGet);
            }
        }
    }
}
这将远程验证标记字段的唯一性,并使用不引人注目的javascript向用户显示错误

最后,你的观点应该是

@Html.TextBoxFor(m => m.Tag) @Html.ValidationMessageFor(m => m.Tag)

你想在哪里检查这个?为什么不使用
返回Json(db.TABLE_NAME.Any(m=>m.Tag==Tag),JsonRequestBehavior.AllowGet)
并删除
try/catch
块?(不是戳你。我只是想知道你是否有理由这样编码,比如性能或其他方面。)你的建议也会起作用。只是Any()和Single()都会引发异常。所以,为了更安全,我总是更喜欢在try-catch块中使用它。只是我的风格:)。我希望你的问题已经解决了。对吗?如果您正在编辑对象,此解决方案不起作用,但它确实适用于创建新对象。编辑时,它将对象的“标记”(在本例中)传递给ActionResult,并将错误抛出客户端,以阻止表单提交。