2013-09-05 50 views
2

我在使用NVelocity時相當新。我正在嘗試爲我的公司編輯一些舊的模板,我收到了這個我不明白的錯誤。在模板中可以,如果訂單有多個貨件,則顯示多個貨件名稱,如果只有一個,則只顯示一個貨件名稱。當有多個貨件時,它可以很好地工作,但是當只有一個貨件時,模板不會呈現所需的貨件名稱,而是打印出類別名稱。c#中的NVelocity模板錯誤

#if($order.Shipments.Count > 1) 
#foreach($shipment in $order.Shipments) 
#beforeall 
#each 
$shipment.ShipMethodName <strong>|</strong> 
#else 
$order.Shipments[0].ShipMethodName // in emails it renders "Orders.OrderShipmentCollection[0].ShipMethodName" 
#end 
#end 

請幫忙。

+0

對不起,如果愚蠢的問題,但你的_else_子句似乎只是處理0貨運的情況。我錯了嗎 ? – jbl

+0

是的......多數民衆贊成在正確的....我編輯了這個問題......它似乎仍然沒有工作...... –

+1

我與@jbl,你的if語句有「> 0」,而不是「> 1」。您還在模板中編輯了錯誤,因爲它現在缺少foreach的#end語句。 如果您不知道,當某些內容爲空或失敗時,NVelocity通常會寫出模板變量引用(例如「$ order.Shipments [0] .ShipMethodName」),但不應寫出類型名稱。我會嘗試打印出「$ order.Shipments [0]」並調試正在傳遞的數據。 –

回答

1

我知道這是一個古老的問題,但如果有人在以後尋找解決方案,我想我會發佈一個答案,因爲我正在經歷沒有接受答案的舊問題。去年9月發表評論時,我並沒有注意到這個錯誤。

$order.Shipments[0].ShipMethodName是給你Orders.OrderShipmentCollection[0].ShipMethodName因爲NVelocity不支持像C#索引器,你需要使用get_Item()方法,即$order.Shipments.get_Item(0).ShipMethodName這是C#編譯器創建索引的基本方法。

發生了什麼是$order.Shipments打印出類型名稱(Orders.OrderShipmentCollection),其餘[0].ShipMethodName只是逐字打印。

+0

+1的描述... –