Primäre Frage
Ich habe ein einziges Formular, das je nach verschiedenen zugrunde liegenden Metadaten verschiedene Variationen eines Formulars anzeigt. In einem speziellen Fall, nur in der bereitgestellten Anwendung (funktioniert einwandfrei in den Dev- und QA-Umgebungen), führt eine Variante des Formulars zu einem 500 Internal Server Error. Ich habe die an den Server zurückgesendeten Daten in den Dev- und Live-Umgebungen untersucht, und es gibt überhaupt keinen Unterschied.
Die Frage ist, wie kann ich diesen 500-Fehler finden? Ich habe elmah installiert, und es wird nicht ausgelöst. Ich habe ein Logging-Statement als ersten Schritt in meinem POST-Handler gesetzt, und es wird nie ausgeführt. Ich habe in meiner web.config gesetzt, und es zeigt mir keine bessere Fehlermeldung. Das einzige, woran ich denken kann, ist, dass es sich um ein Routing-Problem handelt, aber das fühlt sich nicht wirklich richtig an, da dieselben Daten problemlos geroutet werden, um für andere Server zu funktionieren.
Also, was kann ich noch tun, um diesen schwer fassbaren Fehler zu finden?
Hintergrundinformationen
Ich habe ein Berichtsmodul in der App, die ich baue, und es wird von Metadaten gesteuert. Sobald sie auswählen, welchen Bericht sie ausführen möchten, ruft die Software die Metadaten für den Bericht ab, ermittelt, welche Parameter gesammelt werden müssen, und zeigt ein Formular an, um sie vom Benutzer einzusammeln. Sobald der Benutzer das Formular ausgefüllt hat, klickt er auf eine Schaltfläche, die das Formular über einen jquery $.ajax() Aufruf sendet. Der Controller sollte den eingehenden Formularbeitrag aufnehmen, die Formulardaten validieren und entweder das Formular erneut anzeigen oder ein JSON mit einer URL zurückgeben, um die Berichtsrendervorgang anzuzeigen.
Routen Konfiguration
public class RouteConfig {
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Ajax-Postcode
var ajaxUrl = this.action;
var ajaxType = this.method;
var ajaxData = $(this).serialize();
$.ajax({
url: ajaxUrl,
type: ajaxType,
data: ajaxData,
success:
function(result) {
// kam ein JSON vom Server zurück?
if (typeof(result) === "object") { // Umgang mit dem Rückgabewert...
if (window.console) console.log("-- Berichtsparam Formularübermittlung bestanden die Validierung");
$("#popupDialog").popup("close");
// benötigen eine Nicht-AJAX-Version, um zur URL zu gelangen, so dass wir eine DOM-Aktualisierung erhalten - wir möchten auch eine neue Seite
// window.location.href =
window.open(result.URL, '_blank');
} else {
if (window.console) console.log("-- Berichtsparam Formular übermittlung fehlgeschlagen die Validierung");
$('#popupDialog').html(result);
$('#popupDialog').trigger('create');
var _RPT = RevTrak.Portal.Report;
_RPT.Index.initBindings();
}
},
complete: function() {
if (window.console) console.log("-- paramEdit Formularübermittlung AJAX-Aufruf abgeschlossen"); // das zeigt an, dass wir die Validierung bestanden haben
},
error: function(xhr, textStatus, errorThrown) {
var sErrMsg = "";
sErrMsg += "paramEdit Formularübermittlung Fehler ";
sErrMsg += "\n\n" + " - textStatus :" + textStatus;
sErrMsg += "\n\n" + " - Fehlerstatus :" + xhr.status;
sErrMsg += "\n\n" + " - Fehlerart :" + errorThrown;
sErrMsg += "\n\n" + " - Fehlermeldung :" + xhr.responseText;
if (window.console) console.log(sErrMsg)
alert(sErrMsg);
}
});