2012-01-25 4 views
0

Je cette ViewModelChâteau Monorail Complexe Reliure

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;} 
    } 

Pour créer/mettre à jour un produit que je vais avoir une case à cocher pour chaque SellingScopeViewModel (par exemple « site web « catalogue » ...) et l'utilisateur . sélectionnera les champs d'application dans la sorcière qu'il aimerait vendre le produit, et pour chaque champ, il va écrire un prix

J'ai essayé (seule la partie du prix) (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 

Pour créer un ap roduct il n'y a pas de problème. Mais pour la mise à jour d'un produit, le doublage ne fonctionne pas car $ product.Scopes ne peut pas être dans le même ordre que $ Scopes, ou $ product.Scopes peut ne pas être lié à chaque portée. Donc, je vais finir avec

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

Si mes objets sont comme ça

$ Scopes:

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

Et Product.Scopes

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

Je pensais que des changement ProductViewModel.Scope dans un dictionnaire (et utilise l'identifiant de portée au lieu de $ velocityCount) mais je ne suis pas su re comment le cadre va réagir . Ou ne pas utiliser le cadre pour montrer les valeurs de prix et traiter avec un assistant, mais c'est un peu lutter contre le cadre.

Qu'en pensez-vous?

EDIT: FormHelper Castle Monorail lancera une exception si je tente de créer un CheckBoxList avec mon Dictionnary ...

Répondre

0

Je ne suis pas sûr que j'obtenir votre problème, mais pourquoi les deux boucles, vous pouvez mettre vos informations sur les prix dans la boucle où vous imprimez les cases à cocher:

  #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

Il existe 2 boucles car la case à cocher et la zone de texte ne se trouvent pas dans le même bloc html. –