2012-01-23 75 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文件]

相关问题