2012-01-23 78 views
0

我有一些問題發佈一個asp.net MVC3應用。部署時,應用程序失敗,並顯示「控制器路徑/ Dashboard/Alarmes'未找到或未實現IController」,其中Alarmes是DashboardController的操作。不確定它是否與它有關,但Alarmes返回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

你可以發佈你的控制器類定義嗎?包含此控制器的程序集是否存在於已部署網站的「bin」文件夾中? –

+0

@Darin是的。該頁面本身可以被訪問,但對行動Alarmes的調用失敗。 – Fernando

回答

3

我懷疑你已經在你的JavaScript硬編碼的URL調用操作時,而不是使用網址幫手。

所以,你寫道:

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

代替:

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

這將產生的情況下正確的URL時,您的應用程序在虛擬目錄託管具體做法是:

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

你在看我的屏幕?大聲笑。謝謝! – Fernando

+1

@Fernando,有時症狀足以提供診斷。當你說'Index'行動工作正常,但不是說你是通過AJAX調用'Alarmes'動作,當你部署虛擬目錄很清楚,我的應用程序,這只是發生。 –

0

如果試圖清理ASP.Net臨時文件並重新啓動Web服務器是什麼? [{Windows的路徑} \ Microsoft.NET \框架{框架版本} \臨時ASP.NET文件]

相關問題