0

我是 mvc 的新手,所以如果问题很愚蠢,请原谅我,但我想尽我所能。所以,我的情况是:我创建了一个模型并进行了装饰

Partial Public Class App_Modules

    <Required>
    <Remote("CheckForDuplicate", "Validation")>
    <Display(Name:="Code")>
    Public Property code As String

    <Required>
    <Display(Name:="Description")>
    Public Property name As String


End Class

如您所见,代码列必须经过远程验证。在我的 ValidationController 我有代码

     Public Function CheckForDuplicate(code As String) As JsonResult
         Dim data = db.App_Modules.Where(Function(p) p.code.Equals(code, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault()

         If data IsNot Nothing Then
             Return Json("This code already exists",JsonRequestBehavior.AllowGet)
         Else
             Return Json(True, JsonRequestBehavior.AllowGet)
         End If
     End Function
 End Class

一切正常!现在我想对另一个具有相同字段“代码”的模型做同样的事情。有没有办法将模型名称传递给函数而不是行

 Dim data = db.**App_Modules**.Where(Function(p) p.code.Equals(code, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault()

我可以有类似的东西

Dim data = db.**TABLENAME**.Where(Function(p) p.code.Equals(code,  StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault()

所以这个函数是通用的,也可以从其他模型中调用?

4

2 回答 2

0

我不确定 VB 中的语法,但您可以修改 CheckForDuplicate 函数以接受代表模型类的通用参数并将其传递给 DBContext 的 Set 函数。您还需要为包含 Code 属性的模型定义一个接口。c#中的示例代码如下。

public JsonResult CheckForDuplicate<T>(string code) where T : IModelWithCode
{
    var data = db.Set<T>().Where(t => t.Code.Equals(code));
    ....
}

public interface IModelWithCode
{
    string Code { get; set; }
}

希望这将使您朝着正确的方向开始。

于 2014-12-09T14:28:27.853 回答
0

我不认为这是可以做到的,或者至少是不容易做到的。

我会在这里坚持简单:Select Case根据传递的参数(模型名称)创建一个并检查表。

Dim exist = false;

Select Case myModel
        Case "Model1"
            exist = db.Model1Table.Where(Function(p) p.code.Equals(code, StringComparison.CurrentCultureIgnoreCase)).Any()
        Case "Model2"
            exist = db.Model2Table.Where(Function(p) p.code.Equals(code, StringComparison.CurrentCultureIgnoreCase)).Any()
End Select

如果每张桌子都有不同的布局或者你必须做一些其他的检查......你可以自由地在每种情况下做特殊的事情。

更新: 在这里您可以看到一篇文章,展示如何将其他字段传递给验证器操作。您应该创建一个隐藏字段来保存模型名称。 http://www.codeproject.com/Articles/674288/Remote-Validation-in-MVC-Simple-Way-to-Pass-the-F

其他资源:MVC 远程属性附加字段

于 2014-12-09T14:32:56.440 回答