I think there's more differences than commonalities.
Context switching basically refers to whatever CPU context the program code needs to run. That includes stuff like values of the CPU registers, flags, the instruction pointer and stack pointer, priority level, virtual memory setup (page tables) etc.
It doesn't need to include the actual memory of the process, and usually doesn't since swapping out a process's memory in full would be slow. Provided that the system can store multiple programs in memory at the same time, and that the programs have a way of knowing which part of the memory is theirs to use, there's no need to swap out the whole memory of a process when switching to another.
(According to Wikipedia, they used to swap out whole processes in the 1960s, though.)
Paging is the process of moving blocks ("pages") of memory between main memory and some secondary storage, usually in a way that's invisible to the running process.
On a modern-ish system, context switching between processes will include reloading page tables, but doesn't need to involve paging at all, since usually everything fits in memory. On the other hand, paging can happen even within a single process, if one uses enough memory to require swap.
So really, context switching and paging are rather orthogonal, they're just both concepts of multitasking virtual memory OS.