When you use the decorators in the model, two types of validation are available to you. The first one is client side validation - this is when your model has a property called 'name', and you use something like @Html.TextBoxFor(m => m.name) in your .cshtml file, this puts a textbox on your page with client side javascript. You are not writing this javascript yourself, it is being added to your page by asp.net mvc. You can see it if you view the source code of your page.
The good thing about this is that the client side checking happens before the form gets posted, so the user is not waiting for it to get posted and come back with a validation error. The bad thing is that client side validation can be circumvented. If the user has JavaScript disabled, then it won't happen. Alternatively a malicious user can do a post request himself, rather than filling out your form and pressing submit, so the post is going through without client side validation.
Therefore you need to use the second type of validation available to you - server side validation. When you do ModelState.IsValid(), that is when you are performing server side validation, and it is using your decorators as the basis for this validation. If you don't have this statement here, then you are not performing any server side validation and a relying solely on client side validation (which as I just mentioned is a bad idea as it can be circumvented). My rule of thumb is to always use this for any post requests.