2012-01-25 3 views
0

바인딩 내가 가진이 뷰 모델성 모노레일 단지가

class ProductViewModel{ 
List<ProductSellingScopeViewModel> Scopes{get;set;} 
string Name{get;set;} 
int Id{get;set;} 
} 


class ProductSellingScopeViewModel{ 
int IdScope{get;set;} 
decimal Price{get;set;} 
} 

class SellingScopeViewModel{ 
    int Id{get;set;} 
    string Name{get;set;} 
    } 

나는 각 SellingScopeViewModel에 대한 확인란을 선택해야합니다 제품을 업데이트/작성하는 경우 ("예를 들어"웹 사이트 "카탈로그를 ...) 사용자 . 그는 제품을 판매하고 싶습니다 마녀의 범위를 선택하며 각 범위에 대해 그는 가격을 쓸 것이다

을 해봤이 (단지 가격 부분) (NVelocity) :

#set($checkBoxList = $FormHelper.CreateCheckboxList("product.Scopes", $Scopes,"%{text='Name',value='Id',sourceProperty='IdScope'}")) 
      #foreach($elem in $checkBoxList) 
$checkBoxList.Item("$elem.Id") $Form.LabelFor("$elem.Id",$elem.Name) 
      #end 

#foreach($aScope in $Scopes) 
$FormHelper.LabelFor("product.Scopes[$velocityCount].Price","$aScope.Name") 
$FormHelper.TextField("product.Scopes[$velocityCount].Price") 
$FormHelper.HiddenField("product.Scopes[$velocityCount].IdScope") 
#end 

ap 만들기 거기에 아무 문제도 없다.

그러나 제품을 업데이트 할 때 $ product.Scopes가 $ Scopes와 동일한 순서가 아니거나 $ product.Scopes가 모든 범위와 연결되지 않을 수 있으므로 bining이 작동하지 않습니다.

Id - Name 
--------- 
1 - Catalogue 
2 - Call Center 
3 - Web Site 

그리고 Product.Scopes이

IdScope - Price 
-------------- 
3 - 20$ 
1 - 25$ 

내가 변화의 생각 : 내 개체가이

$ 스코프 같이 인 경우에 그래서

Catalogue : |20$| 
Call Center : |25$| 
Web site : || 

될 겁니다 ProductViewModel.Scopes를 Dictionnary에 추가하고 ($ velocityCount 대신 scope id를 사용) su가 아님 프레임 워크가 어떻게 반응할까요? . 가격 값을 표시하고 도우미와 거래하기위한 프레임 워크를 사용하지 않거나 프레임 워크와 맞서 싸우는 것입니다.

당신은 어떻게 생각하십니까?

편집 : 내 사전도 함께 checkboxlist을 만들려고하면 성 모노레일의 FormHelper는

답변

0

임 내가 문제를 확인하지 ... 예외가 발생합니다,하지만 두 개의 루프, 당신은 당신의 가격 정보를 넣을 수있는 이유 체크 박스를 인쇄하는 루프에서 :

  #set($checkBoxList = $FormHelper.CreateCheckboxList("product.Scopes", $Scopes,"%{text='Name',value='Id',sourceProperty='IdScope'}")) 
      #foreach($elem in $checkBoxList) 
       $checkBoxList.Item("$elem.Id") $Form.LabelFor("$elem.Id",$elem.Name) 
       $FormHelper.LabelFor("product.Scopes[$velocityCount].Price") 
       $FormHelper.TextField("product.Scopes[$velocityCount].Price") 
       $FormHelper.HiddenField("product.Scopes[$velocityCount].IdScope") 
      #end 
+0

체크 상자와 텍스트 상자가 동일한 html 블록에 없기 때문에 2 개의 루프가 있습니다. –