2012-01-23 2 views
0

asp.net mvc3 응용 프로그램을 게시하는 데 문제가 있습니다. 배포 할 때 응용 프로그램이 "경로 용 컨트롤러/Dashboard/Alarmes '를 찾을 수 없거나 IController를 구현하지 않습니다"여기서 Alarm은 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

컨트롤러 클래스 정의도 게시 할 수 있습니까? 이 컨트롤러가 포함 된 어셈블리가 배포 된 웹 사이트의 'bin' 폴더에 있습니까? –

+0

@Darin 네 그렇습니다. 페이지 자체에 액세스 할 수 있지만 작업 경보에 대한 호출이 실패합니다. – Fernando

답변

3

작업을 호출하는 대신의 URL 도우미를 사용할 때 당신이 당신의 자바 스크립트 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

@ Fernando, 때로는 증상이 진단을 제공하기에 충분합니다. 'Index' 액션은 AJAX를 통해 호출했던'Alarmes' 액션이 아니라, 가상 디렉토리에 애플리케이션을 배치 할 때만 발생한다는 것을 알았을 때 분명했습니다. –

0

ASP.Net 임시 파일을 정리하고 웹 서버를 다시 시작하려고하면 어떻게됩니까? [{windows-path} \ Microsoft.NET \ Framework {프레임 워크 버전} \ 임시 ASP.NET 파일]

관련 문제