Обвязка замкового монорельсового комплекса

У меня есть эта ViewModel

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

Для создания / обновления продукта у меня будет флажок для каждой модели SellingScopeView (например, «веб-сайт», «каталог» ...), и пользователь будет выбирать объемы, в которых он хотел бы продать продукт, и для каждого объем он напишет цену.

Я пробовал это (только ценовая часть) (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

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

Но для обновления продукта связывание не работает, потому что $ product.Scopes может быть не в том же порядке, что и $ 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), но я не уверен, как отреагирует фреймворк. Или не использовать фреймворк для отображения значений цен и иметь дело с помощником, но это своего рода борьба с фреймворком.

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

РЕДАКТИРОВАТЬ: FormHelper Castle Monorail выдаст исключение, если я попытаюсь создать список флажков с помощью своего словаря ...


person remi bourgarel    schedule 25.01.2012    source источник


Ответы (1)


Я не уверен, что понимаю вашу проблему, но почему два цикла, вы можете поместить информацию о цене в цикл, где вы печатаете флажки:

           #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
person jakobandersen    schedule 15.02.2012
comment
Есть 2 цикла, потому что флажок и текстовое поле не находятся в одном блоке html. - person remi bourgarel; 15.02.2012