2012-06-15 24 views
2

我正在运行带有T4MVC的.Net 4.5位的Visual Studio 2012 RC。T4MVC - 模型绑定操作 - 如何获取完全限定的强类型URL字符串到另一个控制器?

我在我的AccountController的Action方法中,我想为其他控制器生成完全限定的URL,如下所示:

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

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

所以我要调用一个函数时(即创建一个指向我的AccountController操作方法里面我可以通过电子邮件,

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 
    } 

然而,类似这样的其他成员的经验Strongly-typed T4MVC Action/ActionLink我只是得到了名字模型类"www.Models.ConfirmEmail"

的我使用的是最新的T4MVC位,但它并不像有许多人在这里的任何变化,因为这个职务。

我不一定希望能够像这样构建和传递模型,我只需要以强类型,类型安全的方式构造完整的URL。

我知道这个作品;

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

但是,这是没有好,因为它不验证我传递的模型参数甚至适用于该控制器,我可以把它们传递给任何控制器(我已经犯了那个错误)。

是否有任何其他方式来实现此目的,或者我必须在我的Confirm()操作中添加参数列表?

+0

这绝对令人费解,这应该不像T4MVC那样受欢迎。 – John

回答

0

我认为你不能这样做。

如果你看看T4MVC生成的代码,你会发现没有任何东西能够“反转”你的模型绑定器中的逻辑。基本上T4MVC不知道正在使用模型绑定器。

编辑:

您可以使用T4MVC生成URL,但你需要使用T4产生的过载。所以你的情况只是

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

这足以生成URL。参数的实际值将根据您的模型绑定在运行时创建。

+0

够公平的。我不一定要这样做。我真正想要做的(按标题)是从强类型代码生成完全限定的URL。我会很满意任何让我这样做的解决方案。 – cirrus

+0

我不明白编辑。 'Url.Action(MVC.ConfirmEmail.Confirm());'几乎是@cirrus写的,除了参数 - 这就是为什么它不会编译。这是问题的参数。 – John

相关问题