2011-09-17 24 views
6

私はローカルマシン上でVisual Studio 2010を使ってWebアプリケーションを開発しています。昨夜私はIIS 7にアプリケーションをデプロイし、メジャーショーストッパー。この問題は、Ajaxリクエストのエラー処理に関連しています。まず、ajaxリクエストで動作する編集画面があります。ここでは、Ajax編集画面のajax部分の外観を示します。ASP.netでのAjaxリクエストでのエラー処理に関する疑問MVC

@using (Ajax.BeginForm("_CityEdit", null, new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "content", 
                  LoadingElementId="imgSaveLoading", OnFailure="onError", 
                  OnSuccess = "onSuccess" }, new { id = "frmCity" })) { 
    <img id="imgSaveLoading" alt="loading" src="@Url.Content("~/Content/Telerik/Vista/loading.gif")" class="ajax-loader-user" /> 
    <div class="content" id="content"> 
     @{Html.RenderPartial("_CityEdit");} 
    </div> 

    <!-- Some Other code here --> 
} 

I)は、(上記Ajax.BeginFormの "のonError" コールバックに依存しました。私のコントローラでは、エラー(モデルエラーまたはその他のエラー)を表示するたびに、Ajax.BeginFormの "OnError"ハンドラが発生することを楽観的に期待して、サーバーレスポンスを500(内部サーバーエラー)に設定しました。 ()が呼び出されます。ここで私がコントローラでこれをどのようにしたかのスニペットがあります。上記のコードからわかるように

[HttpPost] 
public ActionResult _CityEdit(CityViewModel viewModel) { 
    city = cityManager.FindCity(viewModel.City.Id, false); 
    // Validate Model here 
    if (!TryUpdateModel(city, "City")) { 
     Response.StatusCode = 500; 
     return PartialView("_CityEdit", viewModel); 
    } 

、私はPartialViewを返され、それがモデルのエラーが含まれている場合、彼らは自動的にAjaxの編集画面に表示されます。その後、 "OnError" JavaScriptでは、私は関連するdivを、コントローラによって返されたPartialViewと置き換えます。

function onError(xhr) { 
    $('#content').html(xhr.responseText); 
} 

これはすべて私の開発マシンでうまくいきました。私がIIS 7にアプリケーションをデプロイし、PartialViewではなくWindows XPボックス(Internet Explorer 8またはChrome)からアクセスしたとき、ブラウザはデフォルトの「500 Internal Server Error」画面を表示しました。だから、私は昨夜、よく眠れないほどの疑いがあります。

  1. 私がAjaxを妥当なものに編集するために使用してきたアプローチです。他の方法ではない場合は、Ajax Editing(モデルエラーを表示する機能)を処理できました。

  2. 私はこれらのモジュールを数日間開発しており、かなりの努力を払っているので、XPボックスで動作させるための回避策はありますか?基本的には、ブラウザがデフォルトの「500 Internal Server Error」画面を表示しないようにすることができれば理想的です。私はIIS 7同じWindows上で、私はサイトを参照するために使用している、またはそれがWindows 7の

とうまく動作そのわずかという7マシンをインストールしているので、

  • は、Windows 7で作業し、このアプローチです

    他の提案がある場合は、先に進んでください。

    編集: 私の問題の回避策が見つかりました。だからそれは2番と3番が答えられるのかどうかを疑うことを意味する。基本的にweb.configの次のエントリは、ブラウザがWebサイトのデフォルトブラウザページを表示しないようにします。

    <system.webServer> 
         <httpErrors errorMode="Detailed"/> 
        </system.webServer> 
    

    しかし、それでも私の最初の疑問はなくなります。 Ajaxの編集に合理的なアプローチを使用しましたか?


    私はシオマネキと応答をチェックし、それは、だから、「詳細」の応答を返すように設定する必要があります。サーバーエラー500のデフォルトのエラーページを送信したIISました。私たちはIISマネージャーを使ってこれを行うことができます。私が従っていた別のオプションは、アプリケーションのweb.configファイルでアプリケーションレベルで定義することです。

    しかし、私はこのアプローチに行っても、私のアプリケーション全体をやり直すにしても、やはりジレンマになります。問題は、実際に500台の内部サーバーでモジュールが故障した場合、errorModeが "詳細"に設定されているため、コードがブラウザに公開されることです。だから私は応答エラーコードを500に設定してアプリケーションの他の部分が失敗した場合(私は500ステータスコードを設定していない)、私のコードを公開する代わりにデフォルトのエラーページを送信する必要があります"詳細な"応答を介して。助けてください。

    について、 NIrvan。

  • +0

    ストレンジを参照してください。エラーページがあなたの問題を解決します。コンテンツ全体のページではなく、エラー画面で置き換えられたことを意味しますか?ブラウザの現在のURLも更新されましたか?これはAJAX呼び出し自体が失敗したように聞こえます。なぜなら、通常のGET/POSTになるべきではないからです.JSを介してのみレンダリングする必要があります。あなたのテクニックは、AJAXの呼び出しから500を防御することは決してできないと思う* *とにかく* - OnErrorはそれらを処理するのに十分なはずです。まず、展開された環境で動作していないOnErrorの原因をまず掘り起こすべきだと思います。 – bzlm

    +0

    @bzlm私は、ブラウザがレスポンスステータスを500に設定したときに、ブラウザから返されたレスポンスを無視して、指定されたAjaxリクエストでコントローラから返されたと確信しています。何とかブラウザに代わりに "500 Internal Server Error"しかし、コンテンツ部門のコンテンツだけが「500 Internal Server Error」ページに置き換えられたということは間違いありませんでした。私のhtmlページの他の部分は以前と同じように残っていました。しかし、私はブラウザにエラーページを表示させないようにしなければなりませんでした。本当に "errorMode"が問題を解決しました。私は私の知る限りでは、私のアプリケーションでは何も変えなかった。ありがとう。 – Jatin

    +0

    @bzlm、ここで私は解決策を見つけた。 http://www.bala-krishna.com/how-to-disable-500-internal-server-error-on-godaddy-windows-hosting/ – Jatin

    答えて

    0

    IIS 7の新機能:(。または[リモートとあなたが離れている)あなたのweb.configファイルののcustomErrorsがオンに設定されている場合、IISのエラーページの設定を上書きするために、trueにHttpResponse.TrySkipIisCustomErrorsを設定しなければならない詳細なことthis answer

    関連する問題