Q:

Función que me permita recorrer todos los campos de un 

Al tener muchos <input> mi idea es una función con javascript que pueda recorrer cada <input>de un <form> y si encuentra alguno vacío que me avise con un alert o que me remarque el <input> vacío en rojo. 
También por otra parte, En caso de que el usuario escriba, no permitirle espacios vacíos innecesarios.
¿Como se podría hacer esta función en javascript?
Este es mi <form>.

@using (Html.BeginForm("RegistrarUsuario", "Usser", FormMethod.Post, new { name = "f1" }))
{
    <div class="form-group">
        <label for="lblName">Nombre:</label>
        <input type="text" class="form-control" id="txtName" name="txtName" maxlength="45" required>
    </div>
    <div class="form-group">
        <label for="lblApe">Apellido:</label>
        <input type="text" class="form-control" id="txtSurname" name="txtSurname" maxlength="45" required>
    </div>
    <div class="form-group">
        <label for="lblDate">Fecha de nacimiento:</label>
        <input type="date" class="form-control" id="txtDateBirth" name="txtDateBirth" required>
    </div>
    <div class="form-group">
        <label for="lblEmail">Email:</label>
        <input type="email" class="form-control" id="txtEmail" name="txtEmail" maxlength="45" required>
    </div>
    <div class="form-group">
        <label for="lblUserName">Nombre de usuario:</label>
        <input type="text" class="form-control" id="txtUsserName" name="txtUsserName" maxlength="45">
    </div>
    <div class="form-group">
        <label for="lblPwd">Contraseña:</label>
        <input type="password" class="form-control" name="txtClave1" id="clave1" maxlength="45" required>
    </div>
    <div class="form-group">
        <label for="lblPwd">Repita la contraseña:</label>
        <input type="password" class="form-control" name="txtClave2" id="clave2" maxlength="45" required>
    </div>
    <div class="form-group">
        <label for="lblDom">Domicilio:</label>
        <input type="text" class="form-control" id="txtAddress" name="txtAddress" maxlength="45">
    </div>
    <button type="button" class="btn btn-default" onClick="comprobarClave()">Guardar</button>

A:

Prueba el siguiente código:
Referencia jQuery:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">
</script>

Css para poner los input con border rojo en campos vacíos.
<style>
    .bordeRojoValidacion { 
        border-color: red;
    }
</style>

Funciones Javascript
<script type="text/javascript">

function comprobarClave() {
    validarCamposInput();

    //Other Sentences
}

var mensajeCabecera = "Los siguientes campos están vacíos:\n";
var mensajeValidacion = "";

function validarCamposInput() {
    mensajeValidacion = "";

    $(".form-group > input").each(function () {
        if (this.value == "") {
            mensajeValidacion = mensajeValidacion + (this.id).replace("txt", "") + "\n";
            $("#" + this.id).addClass('bordeRojoValidacion');
        }
    });

    if (mensajeValidacion == "") {
        return;
    }
    else {
        alert(mensajeCabecera + mensajeValidacion);
    }
}

function validarInput(caracter) {
    if(caracter != "") {
        $("#" + caracter.id).removeClass('bordeRojoValidacion');
    }
}

</script>

En el cuerpo del html:
<div class="form-group">
    <label for="lblName">Nombre:</label>
    <input type="text" class="form-control" id="txtName" name="txtName" onkeyup ="return validarInput(this);" maxlength="45" placeholder="Name" required>
</div>
<div class="form-group">
    <label for="lblApe">Apellido:</label>
    <input type="text" class="form-control" id="txtSurname" name="txtSurname" onkeyup ="return validarInput(this);" maxlength="45" placeholder="Surname" required>
</div>
<div class="form-group">
    <label for="lblDate">Fecha de nacimiento:</label>
    <input type="date" class="form-control" id="txtDateBirth" name="txtDateBirth" onkeyup ="return validarInput(this);" placeholder="DateBirth" required>
</div>
<div class="form-group">
    <label for="lblEmail">Email:</label>
    <input type="email" class="form-control" id="txtEmail" name="txtEmail" onkeyup ="return validarInput(this);" maxlength="45" placeholder="Email" required>
</div>
<div class="form-group">
    <label for="lblUserName">Nombre de usuario:</label>
    <input type="text" class="form-control" id="txtUsserName" name="txtUsserName" onkeyup ="return validarInput(this);" placeholder="UserName" maxlength="45">
</div>
<div class="form-group">
    <label for="lblPwd">Contraseña:</label>
    <input type="password" class="form-control" name="txtClave1" onkeyup ="return validarInput(this);" id="clave1" maxlength="45" placeholder="Clave1" required>
</div>
<div class="form-group">
    <label for="lblPwd">Repita la contraseña:</label>
    <input type="password" class="form-control" name="txtClave2" onkeyup ="return validarInput(this);" id="clave2" maxlength="45" placeholder="Clave2" required>
</div>
<div class="form-group">
    <label for="lblDom">Domicilio:</label>
    <input type="text" class="form-control" id="txtAddress" name="txtAddress" onkeyup ="return validarInput(this);" placeholder="Address" maxlength="45">
</div>
<button type="button" class="btn btn-default" onClick="comprobarClave()">Guardar</button>

Para los espacios en blanco de cada input, cuando envíes la info para el registro, solo utiliza trim() para eliminarlos.
Nota: cualquier comentario o duda, me comentas.

