繁体   English   中英

城堡单轨铁路复杂绑定

[英]Castle Monorail Complex Binding

我有这个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.Scopes的顺序不同,因此无法进行装箱。 所以我最终会

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(并使用范围ID代替$ velocityCount),但是我不确定框架会如何反应 或者不使用框架来显示价格值并与帮手打交道,但这有点违反了框架。

你怎么看 ?

编辑:如果我尝试使用我的字典创建复选框列表,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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM