Adding these attributes is only really useful for validating the model when it's posted back into the controller. They don't do anything on the front-end unless you're using the unobtrusive validation (which was always a bit clunky).
If you want front-end validation, you're better off using HTML attributes, for example:
<input type="text" id="id_firstname" maxlength="50" required pattern=".{3,50}" title="Enter a valid name" />
Make your form method "post" and have your button type set as "submit" and everything should work from there. Don't forget to validate your model object when it's posted into the controller too.