2012-11-23 5 views
0

데이터베이스에 산술 식을 저장하려고합니다. 나는 사용자에게 요청 페이지로 동적으로 컨트롤을 추가하여 피연산자와 연산자의 변수 번호 식을 만들 수있는 기능을 제공하려면, 내보기에동적 양식 컨트롤을 사용한 모델 바인딩

Expression 
======= 
id 
name 

Operand 
======= 
id 
expressionId 
value 
side (indicates if the operand is on the left or right side of the expression) 
idx (the index to identify the order of operands on each side) 

Operator 
======== 
id 
expressionId 
type 
side 
idx 

:이 DB 구조를 가지고있다. 사용자가 "피연산자 추가"버튼을 클릭하면 javascript를 통해 연산자에 대한 드롭 다운이 생성되고 피연산자에 대한 텍스트 상자가 생성됩니다.

public class ExpressionCreateViewModel 
{ 
IEnumerable<ExpressionOperator> Operators { get; set; } 
IEnumerable<ExpressionOperand> Operands { get; set; } 
Expression Expression { get; set; } 
} 

모델 바인더가 함께 작동합니다 :

public class ExpressionCreateViewModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var vm = new ExpressionCreateViewModel(); 
     //Build it! 
    } 

을 나는 의심 해요 무엇

내 생각은 행동을 만들고 뷰 모델로 작업 내 표현의 바인딩 사용자 정의 모델을 사용하는 것입니다 of은 동적으로 생성 된 컨트롤의 값을이 뷰 모델에 전달해야하는 방법입니다. 내가 그 일을 생각할 수있는 유일한 방법은 모든 세부 사항을 제공하는 컨트롤 ID 생성 (예 < 입력 유형 = "텍스트"ID = ": 1 개 $ 측 : 피연산자를 왼쪽">)

그리고 나는 구문 분석 할 수 양식 컬렉션의 항목 및 규칙에 따라 피연산자 및 연산자 개체를 작성합니다.

누구나 더 깨끗한 방법이 있습니까?

감사합니다.

크리스

답변

0

뷰 모델에서 수집 속성에 바인딩하는 일반적인 방법은 HTML 요소의 이름에 배열 표기법을 사용하는 것입니다. 예를 들면 다음과 같습니다.

<input type="text" id="someId1" name="Operators[0].Type" /> 
<input type="text" id="someId2" name="Operators[1].Type" /> 

필요한 항목에 따라 기본 바인더가이 작업을 수행 할 수도 있습니다.

+0

재미있는 점은 내가 어디에서 예를 찾을 수 있었는지 알고 싶습니까? Google은 관련된 내용을 반환하지 않습니다. 감사! –

+0

도움이 될 것이라고 생각하십시오. http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx –

+0

Criminy! 컨트롤을 생성 할 때 기존 컨벤션을 따라하면됩니다. 환상적인 것들, 팁을 주셔서 너무 고마워, 나는이 건축술로 더 행복하다. –

관련 문제