2012-09-13 1 views
2

내 (이 단계에서) 간단한 C# MVC3 (면도기) 응용 프로그램에서 오류가 발생하며 아래에서 오류의 원인을 찾을 수없는 것 같습니다.시퀀스에 요소가 없습니다. 스택 추적에 정보가 없습니다.

[InvalidOperationException: Sequence contains no elements] 
    System.Linq.Enumerable.Last(IEnumerable`1 source) +4188046 
    RouteDebug.RouteDebuggerHttpModule.OnBeginRequest(Object sender, EventArgs e) +78 
    System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 

이것은 내가 얻은 것입니다. 줄 번호는 없습니다.

Global.asax.cs의 application_start sectin을 포함하여 코드의 여러 위치에 중단 점을 넣으려고 시도했지만 이러한 디버깅을 시작하지 않는 즉시 디버그를 시작하자마자 프로그램이 즉시 스택 추적을 사용합니다. .

다음과 같이 응용 프로그램의 구조는 : 나는 AdminAreaRegistration.cs 파일에 Application.Core 네임 스페이스를 추가하고, OBJ/빈과 재건을 제거 포함, 이미 몇 가지 제안을 시도했습니다

[Application.Core] 
+Properties 
+Reference 
+Controllers 
+Helpers 
+Models 
+AdminAreaRegistration.cs 
+Global.asax.cs 
[Application.Tests] 
[Application.UI] 
+Properties 
+References 
+App_Data 
+Areas 
    +Admin 
     +Views 
+Assets (css/js/images) 
+Views 

.

난 그저 문제의 원인을 볼 수 없습니다.

업데이트

AdminAreaRegistration.cs

using System.Web.Mvc; 

namespace Application.Core 
{ 
    public class AdminAreaRegistration : AreaRegistration 
    { 
     public override string AreaName 
     { 
      get 
      { 
       return "Admin"; 
      } 
     } 

     public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       "Admin_default", 
       "Admin/{controller}/{action}/{id}", 
       new {controller = "Page", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 
    } 
} 

Global.asax.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Routing; 

namespace Application.Core 
{ 
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801 

    public class MvcApplication : System.Web.HttpApplication 
    { 
     public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
     { 
      filters.Add(new HandleErrorAttribute()); 
     } 

     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Page", action = "Homepage", id = UrlParameter.Optional } // Parameter defaults 
      ); 

     } 

     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 

      RegisterGlobalFilters(GlobalFilters.Filters); 
      RegisterRoutes(RouteTable.Routes); 
     } 
    } 
} 
+1

"엿볼"또는 [RouteDebugger] (http://nuget.org/packages/routedebugger) 또는 이와 유사한 항목이 있습니까? 'RouteDebuggerHttpModule'은 매우 의심 스럽습니다. –

+0

필 Haack의 routedebugger (2.1.4.0)가 처음 앱을 시작했을 때 설치되어 있습니다. 그것은 작동했지만, (내가 생각하기에) 나는이 영역을 만들었고이 영역으로보기를 옮겼습니다. 나는이 오류를 얻었습니다. 하지만 시작했을 때 정확히 말할 수 없었습니다. – kolin

+0

내가 설정 한 관리 영역과 관련이있는 것처럼 보입니다. 나중에 다른 프로젝트가 호출 할 때이를 조사해야 할 것입니다. – kolin

답변

2

반사에, 잘못된 코드는 다음과 같습니다 그래서

private static void OnBeginRequest(object sender, EventArgs e) 
{ 
    if (RouteTable.Routes.Last<RouteBase>() != DebugRoute.Singleton) 
    { 
     RouteTable.Routes.Add(DebugRoute.Singleton); 
    } 
} 

: 어떻게 든 당신이 어떤 경로가없는 것처럼 들린다. 그러나이 모듈이 실제로 LastOrDefault을 사용해야하는지, 아니면 기본적으로이 시나리오에 더 잘 대처할 지 궁금합니다.

RouteDebugger의 최신 버전을 사용하고 있는지 확인 했습니까?

의 경우 경로가 없습니다. 이제 파이프 라인이 다른 순서로 실행되고 있습니까? 먼저해야 할 일 : 해당 모듈을 제거하고 그 외 모든 부분이인지 확인하십시오. 사이트가 해당 모듈을 제외한 마이너스면, Phil에게 문의하십시오.

+0

관리자와 글로벌을위한 경로를 원래 질문에 추가하여 놓친 글자가 눈에 띄지 않는지 확인하십시오 – kolin

+0

nuget을 사용하여 솔루션에서 RouteDebugger를 제거하고 경로가 작동하지 않거나 등록되지 않았다는 것을 의미하는 404를 얻습니다. 올바른 것입니까? – kolin

+0

@kolin 예, * first *를 고친 다음,'RouteDebugger'를 다시 넣으십시오. 라우팅 테이블을 구성하는 global.asax에있는 라인을 지운 것처럼 들립니다. –

0

내에 요소가없는 컬렉션 확장 방법 Last()를 호출 발생 나 일치하는 요소가없는 컬렉션에서 Last(expression)을 호출하십시오.

나는 이런 종류의 호출을 사용했는지 확인하기 위해 내 코드를 검색하려고합니다. (전체 솔루션에서 검색 만하면됩니다.)

가장 좋은 추측은이 논리를 컨트롤러가 아니라 뷰 중 하나에 직접 배치 한 것입니다. RouteDebugger에 반짝이기는

+0

뷰에 하드 코딩 된 논리가 없습니다. 컨트롤러에 뷰 생성을위한 모든 로직이 생성되고 모든 linq 쿼리가 FirstOrDefault로 끝납니다. – kolin