2012-01-23 11 views
0

asp.net mvc3アプリケーションを公開するにはいくつかの問題があります。デプロイされると、アプリケーションは「パスのコントローラー/ Dashboard/Alarmes 'が見つからなかったか、IControllerを実装していません」というエラーで失敗します。ここで、AlarmesはDashboardControllerのアクションです。それに関係があるかどうかはわかりませんが、AlarmsはJsonの結果を返します。デプロイされたMvcアプリは動作しません

私が気づいたもう一つの点は、同じソリューションの別のプロジェクトから参照されるアセンブリの中には展開されないものがあることです(mvcプロジェクト自体で参照する場合のみ)。

これらについてのヒント

更新:

ルート登録:

public static void RegisterRoutes(RouteCollection routes) { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.IgnoreRoute("{*allpng}", new { allpng = @".*\.png(/.*)?" }); 
      routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 
      routes.IgnoreRoute("{directory}/{resource}.asmx/{*pathInfo}"); 

      routes.MapRoute("Default", "{controller}/{action}/{id}", new { 
       controller = "Dashboard", 
       action = "Index", 
       id = UrlParameter.Optional 
      }); 
     } 

アクション:

public ActionResult Alarmes() { 
    var alarmesPorPonto = new Dictionary<string, List<Ponto>>(); 
    var alarmes = _repositorioDeAlarmes.Pesquise(ObtenhaInicio(), DateTime.Today); 

    foreach (var alarme in alarmes) { 
     var tipo = alarme.Tipo; 
     var ponto = alarme.Ponto; 

     if (!alarmesPorPonto.ContainsKey(tipo.Nome)) { 
      alarmesPorPonto.Add(tipo.Nome, new List<Ponto>()); 
     } 

     if (!alarmesPorPonto[tipo.Nome].Contains(ponto)) { 
      alarmesPorPonto[tipo.Nome].Add(ponto); 
     } 
    } 

    return Json(alarmesPorPonto.Select(a => new { Tipo = a.Key, a.Value.Count }), JsonRequestBehavior.AllowGet); 
    } 

別の行方不明情報:私は、仮想ディレクトリに、このアプリケーションをデプロイしています。

アップデート2

フルコントローラクラス:

public class DashboardController : Controller { 
     private readonly IRepositorioDeAlarmes _repositorioDeAlarmes; 
     private readonly bool _enableMap;  

     public DashboardController(IRepositorioDeAlarmes repositorioDeAlarmes) { 
      _repositorioDeAlarmes = repositorioDeAlarmes; 
      _enableMap = Convert.ToBoolean(ConfigurationManager.AppSettings["EnableMap"]);    
     } 

     public ActionResult Index() { 
      ViewBag.EnableMap = _enableMap; 
      return View(); 
     } 

     public ActionResult Alarmes() { 
      var alarmesPorPonto = new Dictionary<string, List<Ponto>>(); 
      var alarmes = _repositorioDeAlarmes.Pesquise(ObtenhaInicio(), DateTime.Today); 

      foreach (var alarme in alarmes) { 
       var tipo = alarme.Tipo; 
       var ponto = alarme.Ponto; 

       if (!alarmesPorPonto.ContainsKey(tipo.Nome)) { 
        alarmesPorPonto.Add(tipo.Nome, new List<Ponto>()); 
       } 

       if (!alarmesPorPonto[tipo.Nome].Contains(ponto)) { 
        alarmesPorPonto[tipo.Nome].Add(ponto); 
       } 
      } 

      return Json(alarmesPorPonto.Select(a => new { Tipo = a.Key, a.Value.Count }), JsonRequestBehavior.AllowGet); 
     } 
} 
+0

ルーティング設定コードとDashboardControllerコードを投稿できますか? – jolySoft

+0

コントローラークラス定義も投稿できますか?このコントローラを含むアセンブリは、配備されたWebサイトの 'bin'フォルダにありますか? –

+0

@ダリンはいそうです。ページ自体にアクセスできますが、アクション「アラーム」への呼び出しは失敗します。 – Fernando

答えて

3

アクションを呼び出す代わりのurlヘルパーを使用しているとき、私はあなたのJavaScriptでURLをハードコードしていると思われます。

だからあなたが書いた:

<script type="text/javascript"> 
    $.getJSON('/Dashboard/Alarmes', function(result) { 
     ... 
    }); 
</script> 

の代わり:

アプリケーションがなり、仮想ディレクトリでホストされている場合場合の正しいURLを生成しているだろう
<script type="text/javascript"> 
    $.getJSON('@Url.Action("Alarmes", "Dashboard")', function(result) { 
     ... 
    }); 
</script> 

<script type="text/javascript"> 
    $.getJSON('/MyAppName/Dashboard/Alarmes', function(result) { 
     ... 
    }); 
</script> 
+0

私の画面を見ていましたか?笑。ありがとう! – Fernando

+1

@フェルナンド、時々症状が診断を提供するのに十分です。 'Index'アクションは正常に動作していたが、AJAXを介して呼び出された' Alarmes'アクションではなく、アプリケーションを仮想ディレクトリにデプロイしたときにのみ発生するということがわかったとき、それは私にはっきりと分かりました。 –

0

ASP.Netの一時ファイルを消去してWebサーバーを再起動しようとするとどうなりますか? [{windows-path} \ Microsoft.NET \ Framework {フレームワークバージョン} \ Temporary ASP.NET Files]

関連する問題