Macauley Bonne grabbed a brace as Charlton came back from a goal down to beat Bristol City and end an 11-game run without a win.

In a thrilling Boxing Day clash at The Valley, the striker drew first blood before Andreas Weimann equalised for the Robins seconds into the restart.

Substitute Niclas Eliasson, who assisted the leveller, then edged City in front before Bonne added a second and Alfie Doughty grabbed a third with eight minutes to go.

But Charlton were left sweating as they had to come through five minutes of added time to claim all three points, moving them up into 16th in the Championship table.

Darren Pratley took the captain’s armband as Lee Bowyer made two changes to the side which rescued a late 2-2 draw with Queens Park Rangers.

Albie Morgan and Deji Oshilaja were both drafted into the starting 11, while skipper Jason Pearce took to the bench, as Charlton sought their first league win in 11 games.

City took the game to Charlton in the early stages as Famara Diedhiou could only put Taylor Moore’s pass wide of the far post following a surging run through midfield.

The hosts would have the better of the chances thereafter, as Ashley Williams did well to deny Bonne before Moore stood tall to thwart Lyle Taylor.

And Naby Sarr, whose 96th minute strike rescued a point at QPR last week, could only glance Doughty’s inviting cross wide of the target following a corner.

Charlton broke the deadlock six minutes before the break, when Bonne latched onto Albie Morgan’s through ball over the top to lob onrushing goalkeeper Daniel Bentley from just outside the box.

Bonne, whose goal was his seventh of the season, went close to doubling his tally in first-half injury time as Tomas Kalas diverted Adam Matthews’ driven low cross away.

But fans had barely got back to their seats for the restart, when City got level as Weimann headed home substitute Eliasson’s cross after just 41 seconds.

City began to build momentum in the second half, forcing Charlton to clear away two dangerous crosses, before taking the lead for the first time on 60 minutes.

After being played in by Robins skipper Josh Brownhill, Eliasson went from provider to scorer when he fired through Dillon Phillips’ legs after Adam Nagy picked out his run in the box.

With the clock ticking and Charlton staring at a 12th straight game without a win, Charlton fought their way back level with 13 minutes remaining.

Bonne grabbed his eighth goal of the campaign when he chased down Taylor’s knockdown header and muscled off Tomas Kalas to lash the ball into the roof of the net.

And he would help put Charlton into the lead four minutes later when Doughty forced home his driven cross at the far post, the hosts’ third of the game.

City chased a third deep into injury time but Phillips produced an important stop City fired in a last-gasp corner and goalkeeper Bentley going up to try and rescue a late point.

Charlton team: Phillips; Matthews, Lockyer, Pratley (capt.), Sarr, Doughty (Solly 90) Oshilaja, Gallagher (Purrington 52), Morgan (Pearce 86); Taylor, Bonne.

Subs not used: Maynard-Brewer (GK), Ledley, Dempsey and Davison.