2010-06-08 2 views
3

MVVM2 패턴을 사용하는 MVC2 응용 프로그램이 있습니다. 양식 입력의 유효성을 검사하기 위해 데이터 주석을 사용하려고합니다.ViewModel의 MVC2 DataAnnotations - MVVM 패턴과 함께 사용하는 것을 이해하지 못합니다.

[HttpGet] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Details(ThingsViewModel tvm) 
    { 
    if (!ModelState.IsValid) return View(tvm); 

     try 
     { 
Query q = new Query(tvm.Query); 
      ThingRepository repository = new ThingRepository(q); 

tvm.Things = repository.All();     
return View(tvm); 
     } 
     catch (Exception) 
     { 
      return View(); 
     } 
    } 

내 Details.aspx보기 강하게 ThingsViewModel에 입력 한 :

<%@ Page Title="" 
     Language="C#" 
     MasterPageFile="~/Views/Shared/Site.Master"   
     Inherits="System.Web.Mvc.ViewPage<Config.Web.Models.ThingsViewModel>" %> 

는 뷰 모델 반환 것의 IList의 구성된 클래스 내 ThingsController에서

나는 두 가지 방법이 개체 및 쿼리 문자열 (양식에 제출 됨) 및 필수 데이터 주석이 있습니다.

public class ThingsViewModel 
{ 
    public IList<Thing> Things{ get; set; } 

    [Required(ErrorMessage="You must enter a query")] 
    public string Query { get; set; } 
} 

내가 이것을 실행, 나는 다음과 같은 오류와 YSOD을 얻을 값을 입력하지 않고 양식에 제출 버튼을 클릭

The model item passed into the dictionary is of type 
'Config.Web.Models.ThingsViewModel', but this dictionary 
requires a model item of type 
System.Collections.Generic.IEnumerable`1[Config.Domain.Entities.Thing]'. 

어떻게 데이터 주석이 뷰 모델 작업을 얻을 수 있나요? 내가 누락 된 부분이나 잘못 될 부분을 볼 수 없습니다. VM이 유효성 검사를 시작하기 전에 VM이 정상적으로 작동하고있었습니다.

답변

1

나는이 문제가 유효성 검사에 있다고 생각하지 않는다.

이 줄을 변경하십시오. 나는이 또는 무엇은 무엇을 모르는이

tvm.Things = repository.ToList(); 

tvm.Things = repository.All(); //Is this the Linq extension method 'All()'? 

;

new ThingRepository(q); 

문자열 매개 변수를 사용하고 일종의 Linq IQueriable 또는 List를 반환합니까? 그게 뭔가를 반환하는 경우 문제가 발생할 수 있습니다.

0

클라이언트 측 유효성 검사를 사용하도록 설정 했습니까? 해커 픽스 일 수도 있지만 오류 메시지에 관해서는 추가 정보없이 말하기가 어렵습니다. 보기 및 렌더링 된 HTML을 게시 할 수 있습니까? 세부 경로가 어떻게 생겼습니까? Details 메서드의 시작 부분에 중단 점을 설정하면 제출 단추를 클릭 할 때 중단 점이 발생합니까? 것들에 목록에 액세스 할 적절한 인터페이스를 구현 한 후

public class ThingsViewModel: IEnumerable<Thing> 

과 : 당신은 너무처럼 ThingsViewModel를 선언 할 수처럼

0

는 것 같습니다.

0

ASP.NET MVC가 잘못된 컨트롤러에 뷰를 매핑하려고 할 수 있다고 생각합니다. 보기를 리턴 할 때 사용하려는보기 파일 이름을 지정해야합니다.

돌아 가기보기 ("ViewName")

관련 문제