【问题标题】:Client side validation for unique field mvc唯一字段 mvc 的客户端验证
【发布时间】:2013-08-03 21:02:19
【问题描述】:

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

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

错误这个标签已经存在...

【问题讨论】:

  • 你想在哪里检查这个?

标签: entity-framework asp.net-mvc-4 unobtrusive-validation


【解决方案1】:

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

[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)

【讨论】:

  • 为什么不使用return Json(db.TABLE_NAME.Any(m => m.Tag == Tag), JsonRequestBehavior.AllowGet); 并删除try/catch 块? (不是在戳你。我只是想知道你是否有理由这样编码,比如性能或其他。)
  • 您的建议也可以。只是 Any() 和 Single() 都可以引发异常。所以,为了更加安全,我总是喜欢在 try catch 块中使用它。只是我的风格:)。我希望你的问题已经解决了。对吗?
  • 如果您正在编辑一个对象,此解决方案不起作用,但它适用于创建一个新对象。编辑时,在这种情况下,它将对象的“标签”传递给 ActionResult 并将错误抛出到客户端阻止表单提交。
猜你喜欢
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 2017-04-07
  • 1970-01-01
  • 2010-09-14
相关资源
最近更新 更多