El controlador MVC está siendo llamado dos veces

Tengo un controlador que se llama dos veces desde una llamada ActionLink.

Mi página de inicio tiene un enlace que cuando se hace clic llama al método Index en el controlador Play. Se pasa una identificación de 100 al método. Creo que esto es lo que está causando el problema. Más sobre esto a continuación.

Aquí hay algunos fragmentos de código:

Página de inicio:

 

Controlador de juego:

 public ActionResult Index(int? id) { var settings = new Dictionary(); settings.Add("Id", id.ToString()); ViewData["InitParams"] = settings.ToInitParams(); return View(); } 

Reproducir vista:

  (html  omitted for brevity)  
Hello

Si elimino el parámetro del método Index, todo está bien. Si dejo el parámetro en su lugar, se llama al método Index con 100 como id. Después de devolver la Vista, el método se llama por segunda vez con un parámetro de nulo.

Parece que no puedo averiguar qué está desencadenando la segunda llamada.

Mi primer pensamiento fue agregar una ruta específica como esta:

 routes.MapRoute( "Play", // Route name "Play/{id}", // URL with parameters new {controller = "Play", action = "Index"} // Parameter defaults ); 

Esto no tuvo más efecto que hacer un enlace más bonito.

No estoy seguro de a dónde ir desde aquí.

Gracias de antemano.

Almiar

¿Hay algún otro marcado que podría estar haciendo referencia accidentalmente a la página? Las referencias de scripts, referencias de imágenes, referencias de css, todas podrían señalarse erróneamente como ‘.’ o la página actual.

10 horas persiguiendo ese error en un proyecto de Java Spring Maven.

Primero en SELECT, pensé que Hibernate solo estaba registrando dos veces, pero luego con INSERT, pensé que las solicitudes se llamaban dos veces. Al recorrer el código, descubrí que el controlador se llamó dos veces …

Intenté con toda la configuración posible de Spring, pensando que el contexto se cargó dos veces o que un bean fue instanciado dos veces …

Desesperado, reestructuré el proyecto pieza por pieza para finalmente agregar un fragmento de HTML y errores de kaboom.

  

El signo agudo era culpable, volviendo a cargar la URL. Sé que el tema es antiguo, pero resumí mis búsquedas con las palabras que solía buscar en vano en Internet para encontrar una respuesta al mismo problema. Podría ayudar a otros …

Puede recorrer el código en su vista. Paso a paso y ver de dónde viene la segunda llamada.

Mientras realizaba la depuración descubrí que una vista parcial causa que se llame al controlador por segunda vez. Apesta, pero no veo un trabajo alrededor de eso.

Intenta cambiar el int? id int? id a int id . Está igualando la ruta la segunda vez porque estás llamando al índice nuevamente con una identificación nula.

También puedes intentar cambiar tu ruta a esto.

 routes.MapRoute( "Play", // Route name "Play/{id}", // URL with parameters new { controller = "Play", action = "Index" , id = "" } // Parameter defaults ); 

debería haber un marketing html que no funciona correctamente. por favor revise todo img tage. también verificar

  

Algo muy estúpido que hice … tenía 2 formularios en una página con un botón en cada formulario. Agregué el script para enviar un formulario específico basado en el botón que se hizo clic pero, como la acción predeterminada de un botón en un formulario es hacer un envío, llamó a mi Acción del controlador dos veces. : ^ (

  $('https://stackoverflow.com/questions/2751138/mvc-controller-is-being-called-twice/#SaveButton').click(function (event) { $("https://stackoverflow.com/questions/2751138/mvc-controller-is-being-called-twice/#AttendanceDetailForm").submit(); }); 

Yo también estaba enfrentando el mismo problema. después de revisar minuciosamente mi proyecto, no encontré ninguno de esos casos de referencia vacíos. Luego descubrí que es causado por FireBug. La desactivación del Firebug o el uso de otro navegador que no tiene firebug instalado resolvió el problema.

Tuve este mismo problema y verifiqué todas las sugerencias posibles, pero no tuve suerte, entonces noté que seguí el mensaje de advertencia de JS en mi consola.

La XMLHttpRequest sincrónica en el hilo principal está en desuso debido a sus efectos perjudiciales para la experiencia del usuario final. Para obtener más ayuda, consulte https://xhr.spec.whatwg.org/ .

 xmlHttp = new XMLHttpRequest(); 

Corregí esto y funciona para mí.

Cuide todos sus errores js y mensajes de advertencia .

Esto puede ayudar a alguien.

Mi problema se resolvió asegurándome de que no estaba haciendo doble referencia a mis archivos JavaScript , que yo era.

Esto causó que la acción se golpeara dos veces cuando hice clic en el enlace.

Sé que lo anterior se ha dicho antes, pero pensé que señalaría que vale la pena verificar para ver si sus archivos se están cargando dos veces, especialmente si está usando Partial Views .

Noté que en una de mis Partial Views , le decía que usara la página de diseño principal que contenía las secuencias de comandos que eran responsables de lo que sucedía cuando hacía clic en los enlaces. Así que arreglé esto simplemente configurando layout = null; ya que es una vista parcial de todos modos y ya se está cargando dentro del diseño principal.

En mi caso, estaba usando una vista parcial (por lo que no hay tags de formulario) y el uso de un controlador de clic en JQuery para llamar a un método en el controlador a través de Ajax. Pero había declarado el botón al que se adjuntó el controlador como tipo Enviar. Olvidé pasar e a mi función de controlador para llamar a e.PreventDefault () !! Entonces el método del Controlador se llamaba dos veces: una vez desde una llamada ajax y una vez para Enviar. La segunda vez en torno a los parámetros fue nula. Esto me causó tanto dolor. Una cosa tan pequeña. Tan pequeño que se pasó por alto fácilmente. Espero que esto ayude a alguien más.

En mi caso, fue una secuencia de comandos remota configurada incorrectamente Yandex.metrika (analítica de Google Analytics). Este script se presentó en cada página, por lo que cualquier controlador y cualquier acción se llamó dos veces. Verifique su configuración de Ya.metrika para más detalles.