城堡单轨综合装订

本文关键字:综合 单轨 城堡 | 更新日期: 2023-09-27 18:21:17

我有这个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;}
    }

对于创建/更新产品,我会为每个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

创建一个产品是没有问题的。

但是,对于更新产品,装箱不起作用,因为$product.Scopes可能与$Scopes的顺序不同,或者$product.Sscopes可能不与每个作用域链接。所以我最终会选择

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

如果我的对象像这个

$范围:

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

和产品范围

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

我曾想过将ProductViewModel.Scopes更改为Dictionnary(并使用scope id而不是$velocityCount),但我不确定框架会如何反应。或者不使用该框架来显示价格值并与助手打交道,但这有点违背该框架。

你觉得怎么样?

编辑:如果我试图用我的Dictionnary创建一个复选框列表,Castle Monorail的FormHelper将抛出一个异常。。。

城堡单轨综合装订

我不确定我明白你的问题,但为什么有两个循环,你可以把你的价格信息放在你打印复选框的循环中:

           #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