2013-09-05 2 views
2

Я довольно новичок в использовании NVelocity. Я пытаюсь редактировать некоторые старые шаблоны для своей компании, и я получаю эту ошибку, которую я не понимаю. ОК, поэтому в шаблоне, если в заказе есть несколько отправлений, тогда отобразите несколько названий отгрузки, и если только один из них отобразит только одно имя отгрузки. когда есть несколько партий, он отлично работает, но когда есть только один, тогда какой-то шаблон не отображает требуемое имя shiment вместо распечатки имени класса.Ошибка шаблона NVelocity в C#

#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

yes ... thats right .... я отредактировал вопрос ... кажется, что его все еще не работает ... –

+1

Я с @jbl, смущенный вашим оператором if, который имеет «> 0», а не "> 1". Вы также отредактировали ошибку в шаблоне, так как теперь отсутствует инструкция #end для foreach. Если вы не знаете, что NVelocity обычно выписывает ссылку на шаблонную переменную (например, «$ order.Shipments [0] .ShipMethodName»), когда что-то является нулевым или неудачным, но не должно выписывать имена типов. Я попробую распечатать «$ order.Shipments [0]» и отладить передаваемые данные. –

ответ

1

Я знаю, что это старый вопрос, но в случае, если кто-то ищет решение позже, я думал, что отправлю ответ, когда я проходил старые вопросы, которые не принимали ответы. Я не понимаю, как я не заметил ошибку, когда я опубликовал этот комментарий в сентябре прошлого года.

$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 для описания ... –

Смежные вопросы