In 10 years "they" will still be saying learn C because C is nothing but a glorified assembly language with some syntactic sugar. C shows you how your computer works. There is very little to gain by using assembly over C (with the special exception of specialized instruction sets, like SIMD).
Until the computer changes so fundamentally that a simple imperative language no longer matches the hardware, or some other simple imperative language does a better job (unlikely), learning C will always be good advice.
Maybe I just didn't dabble with C enough before dabbling in assembly, but that was where I really learned about the stack, registers, variable allocation and function calls. With C I mostly just thought in terms of perl and ignored the implementation details. Static typing, malloc/free, strings-as-arrays and arrays-as-pointers were new to me, but I don't feel like I really understood what was going on at that point.
It's possible to be a solid C programmer (ie clear understanding of pointers, stack vs. heap, etc) while still not having the depth of knowledge one gets from understanding at least some assembly. When I first learned about the concept of stack overflows (ie as explained in Smashing The Stack For Fun And Profit: http://insecure.org/stf/smashstack.html) my understanding of C really expanded, mostly through the added insight provided by thinking about C in the context of assembly.
Learning assembly does teach you quite a bit. I think that at some point every programmer would benefit greatly from knowing (an) assembly language and C.
Is it absolutely essential? (Depending on what exactly you are doing) No. Is it very useful? Definitely.
For that matter, an understanding of digital electronics, sufficient to understand how the CPU , ALU, memory caches etc work, can be very useful as well.
My 2 cents.
May it never come to pass...
"The horse rode past the barn fell."
When you tell someone to do something, do you lament the fact that you can't tell them in a programming language, detailing every single step precisely? When I talk about programming in English, it is not the kind of "programming" that you're used to. It's obviously subject to all the ambiguities and interpretation problems that humans have, yet somehow we manage to get by pretty well with it.
I didn't think I would have to actually explain that. Do you want me to put it to you in a programming language?
Personally, I think the importance of C will remain, as it's basically portable assembly. But time will tell.
Even C doesn't teach you about cache behavior, register spilling, calling conventions, and so on.
Plus, it helps to know assembly massively when you're in the embedded domain, or whenever you're close to the metal.