2012-02-15 2 views
1

나는 다음과 같은 작업을했다 적절한 T4MVC 방법으로 도시 매개 변수를 전달할 때. 그것을 달성 할 수있는 방법이 있습니까?T4MVC ModelBinding

답변

3

이 같은 City 유형에 대한 정의 unbinder T4MVC 모델 Unbinder 기능 (http://t4mvc.codeplex.com/documentation 3.1), 당신이 구현할 수와 지금 가능 :

public class CityUnbinder : IModelUnbinder<City> 
{ 
    public void UnbindModel(RouteValueDictionary routeValueDictionary, string routeName, City city) 
    { 
     if (user != null) 
      routeValueDictionary.Add("cityAlias", city.Alias); 
    } 
} 

다음에 등록 (위해 Application_Start에서) T4MVC :

ModelUnbinderHelpers.ModelUnbinders.Add(new CityUnbinder()); 

그 후에는 일반적으로 URL을 생성하기위한 MVC.Home.GetCityObjects (도시)를 사용할 수 있습니다.

2

나는 그렇게 생각하지 않는다. 소스 코드를 보면 당신은 생성 된 방법은 단지 매개 변수 이름 '도시'를 사용 city 인스턴스를 추가하는 것을 볼 수

GetCityObjects().AddRouteValue("cityAlias", city.cityAlias) 

을 :

당신은 매개 변수가없는 버전을 사용하고 수동으로 경로 값을 추가해야합니다.

0

해결 방법을 발견했습니다. 나는 T4MVC에 다음을 하드 코딩 한 :

<#foreach (var method in controller.ActionMethods) { #> 
     public override <#=method.ReturnTypeFullName #> <#=method.Name #>(<#method.WriteFormalParameters(true); #>) { 
      var callInfo = new T4MVC_<#=method.ReturnType #>(Area, Name, ActionNames.<#=method.ActionName #>); 
<#if (method.Parameters.Count > 0) { #> 
<#foreach (var p in method.Parameters) { #> 
<# if (p.Name != "city") { #> 
     callInfo.RouteValueDictionary.Add(<#=p.RouteNameExpression #>, <#=p.Name #>); 
<# } #> 
<# else #> 
<# { #> 
     callInfo.RouteValueDictionary.Add("cityAlias", city.Alias); 
<# } #> 
<#} #> 
<#}#> 
      return callInfo; 
     } 

나는 그것을 좋아하지 말할 수는 없지만, 적어도 내 경우에 작동합니다.

David, T4MVC에 더 일반적인 구현 방법을 소개하는 것에 대해 어떻게 생각합니까?

+0

원칙적으로 좋게 들립니다. 불행히도 T4MVC에서 작업 할 수있는 리소스가 제한되어 있기 때문에이 작업을 할 시간이있는 작성자를 찾아야합니다. 나는 명백한 수정으로 버그를 빨리 고치려고 노력하지만. –

+0

@DavidEbbo, 구현할 시간이 좀 있으면 좋겠지 만 먼저 구현할 것에 대해 논의하고 싶습니다. 유사한 사례를 일반화하고이를 다루는 가장 좋은 방법을 찾아내는 것이 좋습니다. – SiberianGuy