Error 500 (Internal Server Error) al enviar formulario con Ajax.BeginForm

Este error salta cuando usas Ajax para enviar un Form o si estás usando Ajax para recibir datos desde una vista e interactuar mediante Json. Ojo que el error lo puedes ver cuando miras la consola Inspeccionar del navegador. En mi caso yo hacia clic en el botón enviar y simplemente no pasaba nada, revisando La consola puedo ver el error como un error de Jquery con dos mensajes de error:

  • Failed to load resource: the server responded with a status of 500 (Internal Server Error)
  • jquery-3.4.1.js:9837 POST http://imipagina.net/en/Home/Contact 500 (Internal Server Error)

Analizando un poco me doy cuenta que el error se produce cuando el Ajax desea mostrar un resultado luego de recibirlo desde el controlador. Simplemente no aparece y manda el error. Lo que está sucediendo es que por algún motivo el Server no ha podido procesar el resultado que manda el Controller a la Vista. Ahora, buscando soluciones encontré dos que me parecieron con más sentido en mi caso:

  1. El uso de @Html.AntiForgeryToken() ya que el Server interactúa con esta función para validar lo que llega por la vista y entra en el Server o Base de datos. Ese no era mi caso, ya que el error se producía cuando el Controller mandaba una respuesta a la Vista.
  2. La falta de una directiva en el web.config para regularizar las versiones de framework que se están ejecutando. Luego me di cuenta que tenía este mensaje de error bien escondido.

<dependentAssembly>
	<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
	<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
</dependentAssembly>

Aumentado ese bloque de código es que solucioné mi problema, es un poco confuso este tema de las versiones por lo que no me centré en la parte teórica y más bien probé la solución que si funcionó.

Otra cosa que me parece interesante es que para saber cual es el mensaje de error en sí hay que abrir la inspección de código (F12 en Chrome) y luego en la pestaña Network, hacer clic en la pestaña All y buscar en color rojo el error, al hacerle clic veremos la pagina que menda el server pero que no se renderiza por que se trata de Ajax. Alli pude visualizar el error y saber que se trataba de la falta de esa directiva en el web.config. Dejo la foto de como se veía el error.

También te puede interesar...