2010-04-10 3 views
2

어딘가에 숨겨진 마법이있는 것으로 의심되어 T4MVC의 실제 메서드 호출처럼 보이지 않게되었습니다. 그런 다음 뷰를 컴파일하지 못했습니다. stackTrace가 실제 메서드로 들어갔습니다.T4MVC가 동작을 생성하지 않습니다.

 [Authorize] 
    public string Apply(string shortName) 
    { 
     if (shortName.IsNullOrEmpty()) 
      return "Failed alliance name was not transmitted"; 
     if (Request.IsAuthenticated == false || User == null || User.Identity == null) 
      return "Apply authentication failed"; 
     Models.Persistence.AlliancePersistance.Apply(User.Identity.Name, shortName); 
     return "Applied"; 
    } 

결국이 방법은 템플릿에서 생성되지 않습니다. 내 컨트롤러의 방법 Apply[Authorize] 속성을 가지고 있기 때문에

<%=Ajax.ActionLink("Apply", "Apply", new RouteValueDictionary() { { "shortName", item.Shortname } }, new AjaxOptions() { UpdateTargetId = "masterstatus" })%> 

      <%=Html.ActionLink("Apply",MVC.Alliance.Apply(item.Shortname),new AjaxOptions() { UpdateTargetId = "masterstatus" }) %> 

두 번째 방법은 컴파일에 예외가 발생했습니다 그래서 클릭이에 로그인하지 않은 사람은, 그들은 곧 다시 이것 다음, 로그인을 리디렉션하는 경우 페이지. 거기서 그들은 다시 신청을 클릭 할 수 있습니다. 이번에는 로그인 한 것입니다.

그리고 하나는 Ajax.ActionLink이고 다른 하나는 Html.ActionLink입니다. 나는 T4MVC 버전으로 둘 다 시도해 보았습니다.

답변

2

업데이트 : 문제점이 있습니다. T4MVC는 ActionResult를 반환하는 동작 만 지원하므로 문자열을 반환하는이 특정 동작을 처리하지 않습니다.

[Authorize] 
    public ActionResult Apply(string shortName) { 
     if (shortName.IsNullOrEmpty()) 
      return Content("Failed alliance name was not transmitted"); 
     if (Request.IsAuthenticated == false || User == null || User.Identity == null) 
      return Content("Apply authentication failed"); 
     Models.Persistence.AlliancePersistance.Apply(User.Identity.Name, shortName); 
     return Content("Applied"); 
    } 

참고 그것이 ActionResult을 반환하는 방법, 전화를 걸고 '반환 내용 ("...")'대신에 직접 반환 문자열 : 다음과 같이 변경하여이 문제를 해결할 수 있습니다.


받고있는 컴파일 예외에 대한 자세한 내용을 제공해 주시겠습니까? 나는 이것이 당신이 VS에서 보는 것이 아니라 브라우저에서 보는 것이라고 가정합니다. 오류의 전문을 포함시킬 수 있습니까?

일반적으로 MVC 접두사를 통한 T4MVC 호출은 실제 동작 메서드를 호출하지 않아야합니다. 대신 파생 클래스에서 재정의 된 메서드를 호출합니다. AllianceController.generated.cs와 같은 이름의 생성 된 파일 (T4MVC.tt 아래)을 찾습니다. 거기에 T4MVC가 필요로하는 것만 큼 오버라이드 된 'Apply'메소드가 있어야합니다.

+0

경고 : \t 변환 컴파일 중 : 어셈블리 참조 'EnvDTE, 버전 = 7.0.3300.0, 문화 = 중립, PublicKeyToken = b03f5f7f11d50a3a'가 'EnvDTE, 버전 = 8.0'과 일치한다고 가정 할 때 템플릿에 사용자 지정 도구를 실행할 때 다음과 같은 경고가 표시됩니다. 0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a ','런타임 정책을 제공해야 할 수도 있습니다. 경고 '\t 변환 컴파일 중 :'Unreachable code detected \t T4MVC.tt line 788'. 적용 메소드가 생성되지 않습니다. 다른 코드/예외 정보로 질문을 업데이트합니다. – Maslow

+1

이것은 귀하의 문제와 관련이없는 양성 경고입니다. –