2012-04-03 2 views
3

현재 MVC 3보기의 여러 필드를 뷰 모델의 1 속성에 바인딩하는 방법과 달성하려고 할 때 권장되는 사항을 파악하려고합니다. 이.여러 필드를 MVC 3의 동일한 속성에 바인딩보기 모델

무언가를 준비하는 데 걸리는 시간 (분)을 예제로 사용하십시오.

같은 것을 보일 수 있습니다 양식 :

준비 시간 - 영업 시간 : [1] 분 : [30]

와 값이 PreparationTimeInMinutes 속성에 분으로 변환 경계 할 필요가 제출 된 양식 ViewModel의

뷰 모델 속성 :

public short PreparationTimeInMinutes { get; set; } 

하고보기는 강하게 뷰 모델에 입력 현재 아래 가지고있다 : 여기

<div class="editor-label"> 
    @Html.LabelFor(model => model.PreparationTimeInMinutes) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.PreparationTimeInMinutes) 
    @Html.ValidationMessageFor(model => model.PreparationTimeInMinutes) 
</div> 

내가 달성하기 위해에 대해 생각하기 시작했다 몇 가지 있습니다 이.

  1. 변경 그것을 위해 편집기 및 디스플레이 템플릿을 시간 & 분 속성을 가지고 만들 뷰 모델에 PreparationTimeInMinutes 속성 MVC3 바인딩 및 검증을 정렬 할 수 있도록?
  2. 준비 시간에는 javascript와 숨김 필드를 사용하십시오.
  3. MVC 모델 바인딩을 사용하여 이러한 종류의 작업을 수행 할 수있는 몇 가지 다른 접근 방식은 무엇입니까?

누구나 이런 종류의 모범 사례에 대한 제안이 있습니까? 또는 내가 벗어나면.

알려 주시기 바랍니다. 감사합니다

답변

1

첫 번째 옵션을 사용해야합니다.
정확히이 편집기 템플릿이 만들어진 것입니다.

사용자 정의 ModelBinder를 작성하여 두 개의 POST 된 값을 하나의 숫자 (유사한 편집기 템플리트와 함 2)에 바인드하고 특성을 특성에 적용하여 해당 ModelBinder를 선택할 수 있습니다.
하지만, 아마도 과도 할 것입니다.

+0

제출 된 데이터의 순서를 존중하면서 SetProperty 메서드가 한 번만 호출되는 동안 두 값을 바인딩 할 수 있습니까? [질문] [http://stackoverflow.com/questions/19914955/]에 몇 가지 문제가 있습니다. map-multiple-fields-to-a-property-while-binding-the-property] – Hilmi

0

감사 SLAK.

public TimeInMinutesViewModel PreparationTimeInMinutes { get; set; } 

이보기 모델

public class TimeInMinutesViewModel { 
    public string Label { get; set; } 
    public short Hours { get; set; } 
    public short Minutes { get; set; } 
} 

을 만들어 내보기 모델의 아래 한 첫 번째 옵션이 편집기 템플릿

@model TimeInMinutesViewModel 

<div>@Html.LabelFor(x => x.Label)</div> 
<div class="editor-label">@Html.LabelFor(x => x.Hours)</div> 
<div class="editor-field">@Html.EditorFor(x => x.Hours)</div> 
<div class="editor-label">@Html.LabelFor(x => x.Minutes)</div> 
<div class="editor-field">@Html.EditorFor(x => x.Minutes)</div> 

하고 뷰

에 사용
@Html.EditorFor(model => model.PreparationTimeInMinutes) 
@Html.ValidationMessageFor(model => model.PreparationTimeInMinutes) 

아직 테스트하지 않았기 때문에 라벨을 약간 변경해야하지만이 방법을 사용하려는 두 가지 속성에서 작동하는 것처럼 보입니다.

내가 지금 가지고있는 문제는 이것들을 short int 인 내 엔티티 속성에 매핑 할 수 있다는 것입니다. 내가 AutoMapper을 사용하고

그래서이 적어도 한 방향으로, 사용자 정의 형식 변환기와 함께 작동합니다 바라고 있지만 양쪽 방향 :(

2

자바 스크립트는 나쁘지 않지만 정말 확실하지 않다 MVCish. 더 나은 접근 방식은 두 필드를 가진 뷰 모델이거나 에디터/디스플레이 템플릿을 사용하여 새로운 클래스를 만드는 것이라고 생각합니다.

SLAK에 동의하지만이를 처리하기 위해 사용자 정의 모델 바인더를 만들 수는 있지만 아마도 과도한 일일 것입니다 .을 기준으로 한 날짜와 두 번 유형의 맞춤형 바인더를 만들었지 만, 내 방식은 훨씬 간단하지만 실습을 원하거나 모델 bindi에 대해 자세히 알고 싶다면 응, 할 수있어.

편집 : 죄송 합니다만, ModelBinder 경로를 사용하기로 결정한 경우에이 예제는 약간 오래된 것입니다 (아마도 MVC 1 ?!). 나는 추가 수정을해야한다는 것을 잊었다. Theselinks이 예제를 업데이트하는 데 도움이됩니다. 행운을 빕니다.

+0

기사에 대한 좋은 점, 일부 사용자 정의 모델 바인딩을 시도 할 필요가 있습니다. 템플릿이 현재 잘 작동 할 것입니다. 감사 – Pricey

관련 문제