Q:

Mostrar coordenadas en un mapa de google con jquery Asp.Net MVC

Hola tengo un proyecto en asp.net mvc el cual trae unas coordenas de la base de datos y debe mostrar los marcadores en un mapa, pero no lo hace.
Aqui dejo el codigo y el resultado en la consola del navegador.

@model Models.VerRutaModel

<style type="text/css">
    #map {
        height: 100%;
    }
</style>

<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close fa fa-close" data-dismiss="modal" aria-hidden="true"></button>
<h4 class="modal-title" id="VerRutaModal">Ruta </h4>
</div>
<div class="modal-body" style="height: 400px;">
<div id="map"></div>
</div>
<div class="modal-footer text-right">
<button type="button" class="btn btn-primary" data-dismiss="modal">Aceptar</button>
</div>
</div>
</div>

<script type="text/javascript">
    
var locations = [],
center = new google.maps.LatLng(10, 20);

function initialize() {
@foreach (RutaRastreo ruta in Model.RutaRastreo)
{
if (ruta.Gps_Latitud != 0 && ruta.Gps_Longitud != 0)
{
@:locations.push([@ruta.Gps_Latitud, @ruta.Gps_Longitud]);
}
}  
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 10,
center: center,
mapTypeId: google.maps.MapTypeId.ROADMAP
});

var infowindow = new google.maps.InfoWindow();
var marker,
    i,
    position,
    bounds = new google.maps.LatLngBounds();

for (i = 0; i < locations.length; i++) {
position = new google.maps.LatLng(locations[i][1], locations[i][2]);
marker = new google.maps.Marker({
position: position,
map: map
});

bounds.extend(position); // añado la posición a bounds
console.log(position);

google.maps.event.addListener(
     marker,
    "click",
    (function (marker, i) {
    return function () {
    infowindow.setContent(locations[i][0]);
    infowindow.open(map, marker);
    };
  })(marker, i)
 );
}
map.fitBounds(bounds); 
}
   initialize();
</script>

}
}
    

Use estos dos metodos para eliminar las "," en las coordendas, pero el resultado fue el mismo

locations = locations.map((elemento) => {
    return [
       elemento[0], 
       Number(elemento[1] + '.' + elemento[2]), 
       Number(elemento[3] + '.' + elemento[4])
    ];
});
O bien, en ES5

locations = locations.map(function(elemento) {
    return [
       elemento[0], 
       Number(elemento[1] + '.' + elemento[2]), 
       Number(elemento[3] + '.' + elemento[4])
    ];
});

A:

Disclaimer: nunca he usado asp.net-mvc así que no tengo idea de la utilidad de la etiqueta <text> pero esta respuesta debiera servir igual.

Empecemos desde el final retrocediento hasta el principio. 
Primero:
Cuando declaras tus markers, quieres asociar a cada uno un listener que al pinchar sobre el marker abra el infowindow con un contenido locations[i][0]. Esto me hace pensar que en realidad tus locations no son google.maps.LatLng ni google.maps.LatLngLiteral sino arrays compuestos por
[ruta.comentario, ruta.Gps_Latitud, ruta.Gps_Longitud]

En ese caso, locations es un arrar de arrays y el centro del mapa debiese ser declarado en forma independiente. Por ejemplo usando un google.maps.LatLngLiteral:
var locations=[],
    center = { lat: 10, lng: 20};

O bien un google.maps.LatLng
var locations=[],
    center = new google.maps.LatLng(10, 20);

Porque el centro de un mapa puede ser tanto un LatLng como un LatLngLiteral (ver documentación de MapOptions)
Segundo, en cada iteración redefines locations como un array que contiene un objeto google.maps.LatLng
locations = [new google.maps.LatLng(@ruta.Gps_Latitud, @ruta.Gps_Longitud)];

Al final del bucle, locations sólo contendrá el último objeto google.maps.LatLng.
En realidad lo que tú quieres es tener un array de arrays con la forma 
[
    [ruta.comentario, ruta.Gps_Latitud, ruta.Gps_Longitud],
    [ruta.comentario, ruta.Gps_Latitud, ruta.Gps_Longitud],
    [ruta.comentario, ruta.Gps_Latitud, ruta.Gps_Longitud]
]

Por lo cual en vez de redeclarar tienes que ir añadiendo elementos a locations :
 var locations = [];

@foreach (TablaRuta ruta in Model.Ruta)  {
  if (ruta.Gps_Latitud != 0 && ruta.Gps_Longitud != 0)     {
     locations.push([@ruta.comentario, @ruta.Gps_Latitud, @ruta.Gps_Longitud]);
  }
}

Después de lo cual sí tendrás un array de arrays.
Con esas modificaciones, el resto del código debiera funcionar. Hay, eso sí, una mala práctica en medio, y es que tu función initialize tiene un parámetro locations que hace shadowing de la variable global. Como buena práctica, debieras ponerle otro nombre al parámetro para distinguir si hablamos de la variable global o del parámetro, o bien omitir por completo el parámetro, porque la función ya tiene acceso a locations en el ámbito global.
Bonus Track
Supongamos que no conoces de antemano el centro del mapa, y quieres deducirlo a partir de los markers que se vayan a dibujar. En ese caso, puedes crear un elemento google.maps.LatLngBounds e irlo expandiendo con cada marker añadido, para luego decirle al mapa que adopte una posición y zoom que contenga los markers, usando el método fitBounds:
var marker, 
      i, 
      position, 
      bounds = new google.maps.LatLngBounds();

  for (i = 0; i < locations.length; i++) {
    position = new google.maps.LatLng(locations[i][1], locations[i][2]);
    marker = new google.maps.Marker({
      position: position,
      map: map
    });

    bounds.extend(position); // añado la posición a bounds

    google.maps.event.addListener(
      marker,
      "click",
      (function(marker, i) {
        return function() {
          infowindow.setContent(locations[i][0]);
          infowindow.open(map, marker);
        };
      })(marker, i)
    );
  }

  map.fitBounds(bounds);

O bien si quieres mantener el zoom del mapa y sólo modificar su centro en base a los markers:
 map.setCenter(bounds.getCenter());

Edit
Ya que al parecer las coordenadas vienen del backend usando coma como separador decimal, significa que se está declarando locations  como si fuera, por ejemplo:
var locations = [
    ['casa', 3,33654, 2,35454],
    ['trabajo', 4,54825, 8,47574]
];

Javascript interpreta la coma como separador entre elementos de un array, por lo cual se forman arrays de 5 elementos, como si declarases:
var locations = [
    ['casa', 3, 33654, 2, 35454],
    ['trabajo', 4, 54825, 8, 47574]
];

Como .replace es un método de string, en javascript, probablemente dentro de un bucle de asp.net no pueda aplicarse. En ese caso, la solución sería que después de llenar el array:
@foreach (TablaRuta ruta in Model.Ruta)  {
  if (ruta.Gps_Latitud != 0 && ruta.Gps_Longitud != 0)     {
     locations.push([@ruta.comentario, @ruta.Gps_Latitud, @ruta.Gps_Longitud]);
  }
}

Se refiniera locations usando el método .map que tienen los arrays, en la forma:
locations = locations.map((elemento) => {
    return [
       elemento[0], 
       Number(elemento[1] + '.' + elemento[2]), 
       Number(elemento[3] + '.' + elemento[4])
    ];
});

O bien, en ES5
locations = locations.map(function(elemento) {
    return [
       elemento[0], 
       Number(elemento[1] + '.' + elemento[2]), 
       Number(elemento[3] + '.' + elemento[4])
    ];
});

