主な質問
さまざまな基礎となるメタデータに応じて、フォームのさまざまなバリエーションを表示する単一のフォームがあります。1 つのケースでは、展開されたアプリケーション (dev および qa 環境で正常に動作) でのみ、フォームの 1 つのバリアントが 500 内部サーバー エラーを引き起こします。開発環境とライブ環境の両方でサーバーに送り返されたデータを調べましたが、まったく違いはありません。
問題は、この 500 エラーを追跡するにはどうすればよいかということです。elmah をインストールしましたが、つまずくことはありません。POST ハンドラの最初のアクションとして Logging ステートメントを設定しましたが、実行されません。web.config で設定<customErrors mode="Off"/>
しましたが、適切なエラー メッセージが表示されません。私が考えることができる唯一のことは、ある種のルーティングの問題があるということですが、同じデータが他のサーバーへのルーティングに問題なく機能するため、それは実際には正しくありません。
では、このとらえどころのないバグを追跡するには、他に何ができるでしょうか?
背景情報
作成中のアプリにレポート モジュールがあり、それはメタデータ ドリブンです。実行するレポートを選択すると、ソフトウェアはレポートのメタデータを取得し、収集する必要があるパラメーターを特定し、ユーザーからそれらを収集するためのフォームを表示します。ユーザーがフォームに入力したら、ボタンをクリックすると、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 }
);
}
}
Ajax 郵便番号
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);
}
});