2012-06-15 2 views
2

Visual Studio 2012 RC에서 T4MVC로 .Net 4.5 비트를 실행 중입니다.T4MVC - 모델 바인딩을 사용한 작업 - 강력한 형식의 URL 문자열을 다른 컨트롤러로 가져 오는 방법은 무엇입니까?

나는 AccountController에 대한 작업 방법을 사용 중이고 이와 비슷한 다른 컨트롤러의 정규화 된 URL을 생성하려고합니다.

public partial class ConfirmEmailController : Controller 
{ 
    // ... 

    [AllowAnonymous] 
    [HttpPost] 
    public virtual ActionResult Confirm(ConfirmEmailModel model) 
    { 
     //... 
    } 
    // ... 
} 

은 그래서 링크를 만들어 내 AccountController 조치 방법 내부 나 이메일로 보낼 수 있습니다 때 (함수를 호출 할;이 다른 구성원의 경험 Strongly-typed T4MVC Action/ActionLink 유사하지만

private string GetEmailConfirmationUrl(MembershipUser aUser, bool confirm) 
    { 
     string code = aUser.ProviderUserKey.ToString(); 
     var model = new ConfirmEmailModel() { Code = code, Confirm = confirm }; 

     Url.Action(MVC.ConfirmEmail.Confirm(model); // very typesafe but doesn't work 
    } 

, 나는 단순히 이름을 얻을 모델 클래스 "www.Models.ConfirmEmail"

의 나는 최신 T4MVC 비트를 사용하고 있지만 해당 게시물 이후 여기에 어떤 변화가있는 것처럼은 보이지 않는다.

필자는 반드시 이와 같은 모델을 구성하고 전달할 수 있기를 원하지 않습니다. 강하게 유형화되고 형식이 안전한 방식으로 전체 URL을 구성하는 것이 좋습니다.

나는이 작품을 알고있다.

Url.Action(MVC.ConfirmEmail.Confirm().AddRouteValues(new ConfirmEmailModel() { Code = code, Confirm = confirm })); 

그러나 내가 전달하고있어 모델 파라미터가 컨트롤러에도 유효한지 확인하지 않기 때문에 그 안 좋네요, 나는 어떤 컨트롤러 (나는 이미 실수를 한)에 전달할 수있다.

다른 방법이 있습니까? 또는 Confirm() 조치에 매개 변수 목록을 입력해야합니까?

+0

이것은 T4MVC처럼 대중적인 프로젝트에서 지원해서는 안되는 것이 당연합니다. – John

답변

0

나는 그렇게 생각하지 않습니다.

T4MVC에서 생성 된 코드를 보면 모델 바인더의 논리를 '되돌릴'것이 없음을 알 수 있습니다. 기본적으로 T4MVC는 모델 바인더가 사용되고 있음을 알지 못합니다.

편집 : 당신은 URL을 생성하는 T4MVC를 사용할 수 있지만 생성 T4 과부하를 사용할 필요가

. 귀하의 경우 그러니 그냥

Url.Action(MVC.ConfirmEmail.Confirm());

URL을 생성하기에 충분 그. 매개 변수의 실제 값은 모델 바인딩을 기반으로 런타임에 작성됩니다.

+0

충분히 좋습니다. 나는 반드시 그것을 구체적으로하고 싶지는 않다. 내가 정말로하고 싶은 것은 (제목마다) 강력하게 형식화 된 코드에서 완전한 URL을 생성하는 것입니다. 내가 할 수있는 솔루션에 만족할 것입니다. – cirrus

+0

편집 내용을 이해할 수 없습니다. 'Url.Action (MVC.ConfirmEmail.Confirm()); '은 매개 변수를 제외하고 @cirrus가 작성한 것입니다. 그래서 컴파일되지 않습니다. 그것은 문제의 매개 변수입니다. – John

관련 문제