如何将Query字符串参数传递给我的[Remote]数据注释验证

时间:2012-04-30 02:21:48

标签: asp.net-mvc-3 data-annotations

我有一个名为VisitLabResult的对象不应该有两个具有相同LabTestID and VisitID的记录,所以为了强制进行此验证,我在LabTestID属性上创建了[remote]验证,如下所示: -

        [Required]
        [Remote("checkexsistence", "VisitLabResult",AdditionalFields= "VisitID")]
        public int LabTestID { get; set; }

将调用以下操作方法: -

public JsonResult checkexsistence(int LabTestID, int VisitID)
        {

    var result = repository.checkexsistence(LabTestID, VisitID);
    if (result == null)
    {

        var type = true;
        return Json(type, JsonRequestBehavior.AllowGet);

    }
    else {
        var type = false;
        return Json(type, JsonRequestBehavior.AllowGet);
    }
}

,存储库方法是: -

 public VisitLabResult checkexsistence(int labtestid, int visitid =20)
            {
                return (from vlr in entities.VisitLabResults
                       where (vlr.VisitID == visitid && vlr.LabTestID == labtestid)
                       select vlr).FirstOrDefault();}

目前,visitid数据注释中AdditionalFields= "VisitID"内的Remote参数位于查询字符串中,用于调用CreateGet操作方法,查询字符串显示为{{1 }}

但上述情况根本不起作用;如果visitid和labtestid已经存在,则不会显示错误,所以我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

DataAnnotations更多的是确保数据本身可能有效。您不应该尝试使用DataAnnotation确定数据库中其余项的唯一性。如果您真的想沿着这条路走下去,我建议您考虑制作custom validators

答案 1 :(得分:0)

字段VisitID是模型类的一部分(属性)吗?附加字段必须是您的模型类的一部分。例如,如果字段Id在您的模型中(LabTestID属性所在的位置),那么您就像这样注释LabTestID远程注释:

[Remote("checkexsistence", "VisitLabResult",AdditionalFields= "Id")]