C# MVC5中的通用远程验证
我正在使用EF6数据库优先方法开发MVC5应用程序。我的许多模型中的字段都需要一定的验证。我正在使用远程验证来验证它们。由于它被用于许多模型中,所以我尝试使用一种通用方法 为此,我制作了一个名为IEntity的接口,其中包含了模型中使用的所有属性。然后,我对我的验证方法执行了以下操作:C# MVC5中的通用远程验证,c#,asp.net-mvc,validation,generics,remote-validation,C#,Asp.net Mvc,Validation,Generics,Remote Validation,我正在使用EF6数据库优先方法开发MVC5应用程序。我的许多模型中的字段都需要一定的验证。我正在使用远程验证来验证它们。由于它被用于许多模型中,所以我尝试使用一种通用方法 为此,我制作了一个名为IEntity的接口,其中包含了模型中使用的所有属性。然后,我对我的验证方法执行了以下操作: [HttpPost] public JsonResult UniqueCheck<T>(T code) where T : class, IEntity { MyEntities db = n
[HttpPost]
public JsonResult UniqueCheck<T>(T code) where T : class, IEntity
{
MyEntities db = new MyEntities();
if (db.Set<T>().Any(x=>x.S1 == code.S1))
{
return Json("Already Exists!");
}
else
{
return Json(true);
}
}
但问题是验证不起作用,当我在浏览器控制台中检查时,我发现验证实际上进入了方法,但返回了500(内部服务器错误)
我知道问题在于使用方法名编写的T,因为当我删除泛型并硬编码我的模型名时,它工作得很好
我只想使用MVC的远程验证,我非常乐意让这种通用方法发挥作用,因为否则它将在许多位置上进行复制/粘贴。您有500 ISE调用的stacktrace吗?知道它发生在哪里(例如ModelBinder、路由或方法体本身)会有所帮助。。我在浏览器的控制台窗口中看到了ISE调用。。我甚至不知道有错误,因为VS没有显示任何错误。这不仅仅是为了验证。当我转到Chrome中的“Inspect Element”时,我看到了控制台中的错误,不清楚您试图实现什么。
RemoteAttribute
进行ajax调用,并将属性的名称/值对发送到控制器方法,在属性S1
的情况下,它发送S1:someValue
,因此您方法需要一个参数字符串S1
,它不发送任何其他信息(除了在AdditionalFields
中指定的名称/值对(如果您使用它),因此T
是未知的。我想进行一般验证,以便我的所有模型属性S1都可以使用它。控制台中的错误是“加载资源失败:服务器响应状态为500(内部服务器错误)”建议:您可以创建一个具有所需验证的泛型控制器(类级别上的泛型类型T,而不是方法级别上的泛型类型T)。然后您可以通过继承创建具体的版本(这些将是基本的空类)。最后,将有一个RulesController和几个空子级,例如UserRulesController、AdminRulesController等。
[Remote("UniqueCheck", "Rules", HttpMethod = "POST")]
public string S1 { get; set; }