I am building an ASP.NET MVC project and going for the following Architecture:
I usually keep my view models in the Web project and do the input validation in the controller using the ModelState
property. If this succeeds, I map them to domain models (which live in the Core layer) and send those to my services in the Service (could also be Core) layer. The service layer validates business rules and if it succeeds it calls a repository to perform the desired action and returns the result of the operation to the controller.
Keeping your view models in the Web project also allows you to use MVC validation attributes such as RemoteAttribute.
I'm not saying that your design smells, but I do think it's good to separate presentation logic from your Core layer.