主要问题
我有一个表单,根据不同的底层元数据将显示表单的不同变体。在单个情况下,仅在已部署的应用程序中(在 dev 和 qa 环境中工作正常),表单的一个变体会导致 500 Internal Server Error。我已经检查了在开发和实时环境中发送回服务器的数据,完全没有区别。
问题是,我怎样才能找到这个 500 错误?我安装了elmah,它没有被绊倒。我已将 Logging 语句设置为我的 POST 处理程序中的第一个操作,但它永远不会执行。我已经<customErrors mode="Off"/>
在我的 web.config 中进行了设置,但它并没有向我显示更好的错误消息。我唯一能想到的是我有某种路由问题,但这感觉不太对,因为相同的数据可以很好地路由到其他服务器。
那么,我还能做些什么来追踪这个难以捉摸的错误呢?
背景信息
我正在构建的应用程序中有一个报告模块,它是元数据驱动的。一旦他们选择了他们希望执行的报告,软件就会提取报告的元数据,确定需要收集哪些参数,并显示一个表格以从用户那里收集它们。一旦用户填写了表单,他们点击一个按钮,通过 jquery $.ajax() 调用提交表单。控制器应获取传入的表单帖子,验证表单数据,然后重新显示表单或返回带有 url 的 json 以呈现报告渲染器操作。
路由配置
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 }
);
}
}
阿贾克斯邮政编码
var ajaxUrl = this.action;
var ajaxType = this.method;
var ajaxData = $(this).serialize();
$.ajax({
url: ajaxUrl,
type: ajaxType,
data: ajaxData,
success:
function(result) {
// did we get a JSON back from the server?
if (typeof(result) === "object") { //deal with the return result...
if (window.console) console.log("-- reportParam form submit passed validation");
$("#popupDialog").popup("close");
//need non-ajax version to go to url so we get a dom refresh - we want a new page also
// window.location.href =
window.open(result.URL, '_blank');
} else {
if (window.console) console.log("-- reportParam form failed validation");
$('#popupDialog').html(result);
$('#popupDialog').trigger('create');
var _RPT = RevTrak.Portal.Report;
_RPT.Index.initBindings();
}
},
complete: function() {
if (window.console) console.log("-- paramEdit form submit ajax call complete"); //this indicates we passed validation
},
error: function(xhr, textStatus, errorThrown) {
var sErrMsg = "";
sErrMsg += "paramEdit form submit error ";
sErrMsg += "\n\n" + " - textStatus :" + textStatus;
sErrMsg += "\n\n" + " - Error Status :" + xhr.status;
sErrMsg += "\n\n" + " - Error type :" + errorThrown;
sErrMsg += "\n\n" + " - Error message :" + xhr.responseText;
if (window.console) console.log(sErrMsg)
alert(sErrMsg);
}
});