我有这个 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
创建产品没有问题。
但是对于更新产品,bining 不起作用,因为 $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 更改为字典(并使用范围 id 而不是 $velocityCount),但我不确定框架将如何反应。或者不使用框架来显示价格值并与助手打交道,但这有点与框架作斗争。
你怎么看 ?
编辑:如果我尝试使用我的字典创建复选框列表,Castle Monorail 的 FormHelper 将引发异常...