2014-12-09 4 views
0

나는 mvc에서 새롭다. 그래서 질문이 어리석은 일이라면 용서해 준다.하지만 최선을 다하고 싶다. 나는 모델을 생성원격 유효성 검사 asp.net 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 

모두 잘 작동합니다! 이제 같은 필드 "code"를 가진 다른 모델에 대해서도 같은 작업을하고 싶습니다.

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() 

같은 것을 가질 수 너무 다른 모델에서 호출 할 수있는 기능 모델의 이름을 전달 할 수있는 방법 그래서 대신에 라인이 있는가 ?

답변

0

VB에서 구문을 잘 모르지만 Model 클래스를 나타내는 일반 매개 변수를 사용하여 DBContext의 Set 함수에 전달하도록 CheckForDuplicate 함수를 수정할 수 있습니다. 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; } 
} 

바라건대 올바른 방향으로 시작할 수 있기를 바랍니다.

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 Remote Attribute Additional Fields

+0

흠! 그러나 모델 이름 "Model1"또는 "Model2"가 컨트롤러 기능에 전달되는 방법은 무엇입니까? – Makis

+0

내 업데이트를 확인하십시오. – Romias

관련 문제