Controls cannot be reachable in codebehind(because no runat=server)
This statement is not correct, you can always access your form control at server side using
Request.Form collection. Check here for more details. You will be required to iterate over the contents of this collection to get the values.
I think validation steps must operate in codebehind othervise this is
an integrity problem
Validation you need to do by yourself before performing any operation. You might required to write some custom validation logic.