Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC5中的通用远程验证_C#_Asp.net Mvc_Validation_Generics_Remote Validation - Fatal编程技术网

C# MVC5中的通用远程验证

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

我正在使用EF6数据库优先方法开发MVC5应用程序。我的许多模型中的字段都需要一定的验证。我正在使用远程验证来验证它们。由于它被用于许多模型中,所以我尝试使用一种通用方法

为此,我制作了一个名为IEntity的接口,其中包含了模型中使用的所有属性。然后,我对我的验证方法执行了以下操作:

[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; }