Давно не пишу на asp.net mvc но в своё время использовал ViewModel.
К примеру у вас есть класс User у которого кроме прочих переменных есть переменная active которое может быть true/false, тобишь активный юзер или нет, допустим у вас есть форма регистрации юзера, но вы не хотите светить эту переменную. Использовать модель User не безопасно, так как это поле всё равно можно будет заполнить и при мапинге формы на модель это переменная заполнится, есть два решения.
1)public ActionResult registration([Bind(Exclude = «active»)] User model)
Так при мапинге данных формы на модель поле active проигнорируется.
2)public ActionResult registration(UserViewModel model)
UserViewModel будет точно такая же как и User класс, кроме поля active, таким образом поле active из формы вообще никогда не прийдёт.
Повторюсь, я давно не писал на asp.net mvc, так что может кто что дополнит или поправит.