England moved to the top of the standings on eight points, ahead of defending champion Australia on net run-rate. There was also a positive outcome for Afghanistan, with the total surpassing its 232 against Sri Lanka in Dunedin four years ago as its highest at a World Cup.
Hashmattullah Shahidi was felled after ducking into a short ball from Mark Wood that hit his helmet in the 30th over, but he recovered to score 76 and share a national World Cup record partnership of 94 with Asghar Afghan (44). Jofra Archer and Adil Rashid each took three wickets for England.
Morgan went to the crease in the 30th over at 164-2 and raised the total to 359 before his explosive innings ended when he was caught on the boundary in the 47th over.
A doubtful starter at Old Trafford because of back spasms in England's previous game, Morgan was barely an over into his innings when he got an inside edge to Afghanistan skipper Gulbadin Naib and shaped to run for a single. He dropped his bat in a collision with Gulbadin as he turned to get back to safety.
Morgan's discomfort was fleeting, though, as he belted Gulbadin's next legitimate delivery — a free hit following a no-ball — for six over deep mid-wicket. Just for good measure, he followed up by clearing the rope at long-on.
It really set the tone. The 32-year-old left-hander raised his half-century from 36 balls and reached his 13th ODI century from 57, the fourth-fastest hundred ever at a World Cup.
Morgan beat Chris Gayle's ODI mark of 16 sixes — for the West Indies against Zimbabwe in the 2015 World Cup — when he flat-batted Gulbadin straight back down the ground.
There was a pause while the TV umpire checked the distance before umpire Paul Reiffel raised both arms to signal Morgan's record 17th.
He tried to go one better on the next ball but was caught in the deep, giving Gulbadin a third wicket and eventual figures of 3-68 from 10 overs — Afghanistan's best return of the game.
Morgan dominated a 189-run third-wicket partnership with Joe Root, who was 45 when his skipper arrived at the crease and was eventually out for 88 from 82 deliveries.
Fielding errors cost Afghanistan dearly, none more than the dropped catch when Morgan was on 28. He pulled a Rashid Khan ball out to deep midwicket, where Dawlat Zadran got one hand to the ball before letting it trickle to the boundary.
Morgan hit two more sixes in the over, and just kept swinging.
He took 22 off one over against Rashid and generally dismantled Afghanistan's best bowler, who conceded the worst ever figures in a World Cup game of 9-0-110-0.
Morgan drove two sixes into the upper deck of the broadcasting box straight down the ground, and one clattered so heavily into the stand that the leather ball had to be replaced.
England had injury concerns coming into the week, with Morgan and opener Jason Roy leaving the field last Friday in the eight-wicket win over West Indies. Roy has been ruled out for two games with torn muscle in his left hamstring.
Roy's replacement, James Vince, scored 26 in a 44-run opening stand with Jonny Bairstow, who contributed 90 from 99 balls in a 120-run second-wicket stand with Root.
England's confidence is high with four wins and a loss going into Friday's game at Sri Lanka at Leeds. Winless Afghanistan is unlikely to get any reprieve, with No. 2-ranked India up next on Saturday.
Fastest Hundreds at Cricket World Cup
50 - Kevin O'Brien, Ireland vs. England, Bangalore, 2011
51 - Glenn Maxwell, Australia vs. Sri Lanka, Sydney, 2015
52 -AB de Villiers, South Africa vs. West Indies, Sydney, 2015
57 - Eoin Morgan, England vs. Afghanistan, Manchester, 2019
66 - Matthew Hayden, Australia vs. South Africa, St. Kitts, 2007
67 - John Davison, Canada vs. West Indies, Centurion, 2003
The Alternative Commentary Collective are podcasting their way through the World Cup. Known for their unconventional sports analysis and off-kilter banter, the ACC have come to ask the tough questions. Here's the latest episode of 'The Agenda':
WARNING: GRAPHIC CONTENT