多个类别的远程验证

时间:2019-02-06 07:14:54

标签: c# asp.net-mvc

此代码用于验证唯一字段:

型号:

public class SubCategory
    {
        [Key]
        public int ID { get; set; }

        [StringLength(450)]

        [Remote("IsProductNameExist", "Products", AdditionalFields = "ID",
                ErrorMessage = "Product name already exists")]
        public virtual string Name { get; set; }
        public virtual string ParentName { get; set; }
    }

控制器:

public JsonResult IsProductNameExist(string Name, int? ID)
    {
        var validateName = db.SubCategories.FirstOrDefault
                            (x => x.Name == Name && x.ID != ID);
        if (validateName != null)
        {
            return Json(false, JsonRequestBehavior.AllowGet);
        }
        else
        {
            return Json(true, JsonRequestBehavior.AllowGet);
        }
    }

一切正常。问题是我还有多个其他类(即Category,FarlowCategories),其中Name字段必须是唯一的,我还想以某种方式对所有这些字段重用此代码。我无法弄清楚如何将调用类名传递给IsProductNameExist方法,以使其知道应根据调用类将其检入数据库的表...或者还有其他方法可以实现它。

1 个答案:

答案 0 :(得分:0)

您可以尝试如下使用:

public JsonResult IsProductNameExist(DbSet<T> dbSet,string Name, int? ID) where T : class, new()
    {
        var validateName = dbSet.FirstOrDefault
                            (x => x.Name == Name && x.ID != ID);
        if (validateName != null)
        {
            return Json(false, JsonRequestBehavior.AllowGet);
        }
        else
        {
            return Json(true, JsonRequestBehavior.AllowGet);
        }
    }

您可以像上面的方法

public void check(string Name, int? ID)
{
    var tableNameCheck1= IsProductNameExist(_dbContext.SubCategories, Name, ID);
    var tableNameCheck2= IsProductNameExist(_dbContext.Categories, Name, ID);       
}

dbSet 是您可以通过的dbcontext.TableName