2013-06-10 2 views
0

MVC의 뷰 모델은 모델의 객체가 아닌 단일 페이지에 데이터를 반영한다고 생각했습니다. 그러나 viewmodel은 해당 페이지 또는 해당 페이지에서 다시 원하는 데이터에 표시하려는 데이터에 해당해야합니까? 예를 들어 로그인 페이지를 보면 사용자 이름이이고 비밀번호가인데, 로그인 페이지 (이전 오류 메시지 등)를 표시 할 때보다 많은 변수가 필요할 수 있습니다. MVC의 뷰 모델은 어떻게 페이지가 있어야합니까?

는 뷰 모델은 단지 이름 및 매개 변수로 암호 및 변수의 나머지 부분을 포함 viewbags에서 끝나야합니다. 또는 viewmodel에 응답하려는 일부 값에만 관심이 있지만 표시하려는 모든 값이 들어 있어야합니다.

뷰 모델을 사용할 때 가장 좋은 방법은 무엇입니까?

답변

1

어떻게 든 html과 서버간에 상호 작용하는 모든 데이터는 ViewModel에 있어야합니다. 이렇게하면 HTML 외부와 ViewModel 속성 내부에서 서식을 지정할 수 있습니다.

그러나 페이지에 많은 컨트롤이나 데이터가 포함되어있는 경우이를 여러 ViewModel (예 : Get 및 Post)로 분할 할 수 있습니다. 게시물 모델에는 입력 한 데이터 만 포함될 수 있으며 유효성을 검사해야합니다.

+0

Get 및 Post 함수에 대해 서로 다른 ViewModel을 사용하려면 어떻게해야합니까? Post reply (사용자 이름과 암호 만 사용)에 대한 ViewModel을 만들고 들어오는 매개 변수 유형으로 지정 한 다음 들어오는 매개 변수 중 일치하는 이름을 기반으로 MVC가이를 채울 것으로 기대합니까 아니면 어떻게 작동합니까? – Ohlin

+0

예, 꽤 많이 있습니다. 입력 필드의 이름이 등록 정보의 이름과 일치하는지 확인하십시오. 그런 다음 컨트롤러에 Post 메소드를 사용하려면 Post Model을 매개 변수로 지정하십시오. – Ronald

+0

문제 없습니다. 언제든지 환영합니다. – Ronald

1

모든 것을보기 모델에 넣는 것이 가장 좋습니다. 이렇게하면 코드가보다 깨끗해지며 검색 및 유지 관리가 쉬워집니다. 여기서 뷰 모델이 기본 메커니즘이어야합니다.

1

사용자 이름과 비밀번호에 필요한 속성 만 말해줍니다. 오류 메시지를 표시하려면 ModelState가 그 대상입니다. 당신은 항상 당신의 ModelState에 오류 메시지를 추가 할 수 있습니다 : 그 너머

ModelState.AddModelError("PropertyName", "Error Text") 

을의 당신이 드롭 다운에서 하나 개의 범주를 선택해야 카테고리의 목록을 포함하는 형태가 있다고 가정 해 보자. 이 경우 나는 제출 된 유일한 것이 실제 선택된 값이더라도 보통 그 모델을 내 모델에 붙인다. 그러나 이것은 기본 설정의 문제입니다. 즉,이 SelectList 범주를 포함하도록 ViewBag를 설정 한 다음 DropDownList에 바인딩 할 수도 있습니다. ViewBag은 동적이며 ViewBag에있는 모든 것을 뷰의 기본 유형으로 캐스팅해야하므로 모델에 배치하는 것이 좋습니다.

+0

그렇습니다. 뷰백을 사용하는 데별로 열의가 없기 때문에 다음과 같은 스마트 솔루션을 기대하고 있습니다 .- – Ohlin