2012-01-25 4 views
0

Я это ViewModelзамок Монорельс комплекс Binding

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 

Для создания продукта t здесь нет проблем.

Но для обновления продукта биение не работает, потому что $ product.Scopes migh не может быть в том же порядке, что и $ Scopes или $ product.Scopes может не связываться с каждой областью. Так что я в конечном итоге с

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

Если мои объекты как этот

$ Скоупсом:

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

И Product.Scopes

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

Я думал изменения ProductViewModel.Scopes в Dictionnary (и использовать идентификатор области вместо $ velocityCount), но я не уверен, как структура будет реагировать . Или не используйте рамки для отображения цен и обратитесь к помощнику, но это своего рода борьба с каркасом.

Что вы думаете?

EDIT: FormHelper Замок монорельсовая дорога будет бросать исключение, если я пытаюсь создать CheckBoxList с моим Dictionnary ...

ответ

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

Существует 2 цикла, потому что флажок и текстовое поле находятся не в одном и том же блоке html. –