唯一字段mvc的客户端验证

use*_*808 2 entity-framework unobtrusive-validation asp.net-mvc-4

我需要为我的字段实现唯一的验证检查

[Key]
[Required]
[DisplayName("Tag")]
public string Tag { get; set; }  
Run Code Online (Sandbox Code Playgroud)

此标记已存在错误...

小智 14

您可以使用远程验证规则来实现此目的.将此规则添加[Remote("IsTagAvailble", "MyController", ErrorMessage = "Tag Already Exist.")]到"标记"字段.你的新代码将是

[Key]
[Required]
[DisplayName("Tag")]
[Remote("IsTagAvailble", "MyController", ErrorMessage = "Tag Already Exist.")]
public string Tag { get; set; }
Run Code Online (Sandbox Code Playgroud)

第一个参数是Action名称,第二个参数是控制器名称,第三个参数是要显示给用户的错误文本.现在在控制器中定义这个新动作,例如样本中的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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将远程验证标记字段的唯一性,并使用不显眼的javascript向用户显示错误.

最后你的观点应该是这样的

@Html.TextBoxFor(m => m.Tag) @Html.ValidationMessageFor(m => m.Tag)
Run Code Online (Sandbox Code Playgroud)

  • 为什么不使用`return Json(db.TABLE_NAME.Any(m => m.Tag == Tag),JsonRequestBehavior.AllowGet);`并删除`try/catch`块?(不是在戳你.我只是想知道你是否有理由以这种方式编码,比如表现或其他.) (2认同)