T4MVC的自定义模型活页夹。

| 我的MVC应用程序中有一个自定义模型活页夹,但是我不知道我是否可以将T4MVC与它一起使用。 通常,我会这样称呼我的行动:
return RedirectToAction(\"Edit\", \"Version\", new {contractId = contract.Id.ToString()});
使用T4MVC应该是这样的:
return RedirectToAction(MVC.Version.Edit(contract));
但是由于T4不了解我的资料夹,因此他尝试在url中发送对象,但我想要的是他生成的网址是这样的:Contract / {contractId} / Version / {action} / {version} 另请注意,我有一条自定义路线:
routes.MapRoute(
                \"Version\", // Route name
                \"Contract/{contractId}/Version/{action}/{version}\", // URL with parameters
                new { controller = \"Version\", action = \"Create\", version = UrlParameter.Optional } // Parameter defaults
            );
这是我的活页夹:
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var contractId = GetValue(bindingContext, \"contractId\");
            var version = GetA<int>(bindingContext,\"version\");

            var contract = _session.Single<Contract>(contractId);
            if (contract == null) 
            {
                throw new HttpException(404, \"Not found\");
            }
            var user = _authService.LoggedUser();
            if (contract.CreatedBy == null || !contract.CreatedBy.Id.HasValue || contract.CreatedBy.Id.Value != user.Id)
            {
                throw new HttpException(401, \"Unauthorized\");
            }

            if (contract.Versions.Count < version)
            {
                throw new HttpException(404, \"Not found\");
            }
            return contract;
        }
我该怎么办?我不想在自己的路线上出现魔术串... 谢谢!     
已邀请:
尝试这样的事情:
return RedirectToAction(MVC.Version.Edit().AddRouteValues(new {contractId = contract.Id.ToString()}));
    
现在,使用ModelUnbinders可以实现相同的效果。 您可以实现自定义unbinder:
public class ContractUnbinder : IModelUnbinder<Contract>
{
    public void UnbindModel(RouteValueDictionary routeValueDictionary, string routeName, Contract contract)
    {
        if (user != null)
            routeValueDictionary.Add(\"cityAlias\", contract.Id);
    }
}
然后在T4MVC中注册(从Application_Start):
ModelUnbinderHelpers.ModelUnbinders.Add(new ContractUnbinder());
之后,通常可以使用MVC.Version.Edit(contract)生成URL。     

要回复问题请先登录注册