It's not just about compile-time vs runtime checking. It's about not littering your code with stuff sensitive to typos and having to do a global search and replace it in case something gets changed. Plus, there's no way to have them gathered somewhere all together so you can see how many different things you have as strings inside your code.
One thing that particularly annoys me is viewing names and paths. Although it's common practice to have them in code as strings, I personally find it too messy. And then, there are controller and action names, although there are some ways to avoid that part.
I have seen a lot of approaches to this, including people maintaining a custom-made class (or a bunch of constants) with all the names, referencing it in their code, and manually updating it when something changes (yikes!)
For this reason, I tried T4MVC on some projects. For those of you who don't know what this is, it's a T4 template that automatically generates view, controller, and action names in code (it actually creates a hierarchy of classes with those names as properties) so you can use them in code instead of strings and take advantage of autocomplete as well.
But T4MVC has some restrictions, and the most important is that it cannot "sit" outside the project your views and controllers are in. There have been some third-party modifications to allow it to exist on a second project, but it's still troublesome since it still dictates your project structure.