2

我正在使用带有 T4MVC 的 .Net 4.5 位运行 Visual Studio 2012 RC。

我在我的 Action 方法中AccountController,我想为另一个看起来像这样的控制器生成一个完全限定的 URL;

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

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

所以我想调用一个函数(当在我的 AccountController Action 方法中创建一个我可以通过电子邮件发送的链接时;

    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
    }

不过和这个其他成员的经历类似强类型的T4MVC Action/ActionLink我只是简单的拿到模型类的名字"www.Models.ConfirmEmail"

我正在使用最新的 T4MVC 位,但自那篇帖子以来,这里似乎没有任何变化。

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

我知道这行得通;

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

但这不好,因为它不能验证我传入的模型参数是否对该控制器有效,我可以将它们传递给任何控制器(我已经犯了那个错误)。

有没有其他方法可以实现这一点,或者我必须在我的Confirm()操作中添加一个参数列表?

4

1 回答 1

0

我不认为你能做到这一点。

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

编辑:

您可以使用 T4MVC 生成 URL,但您需要使用 T4 生成的重载。所以在你的情况下

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

That is enough to generate URL. The actual value of the parameter will be created at runtime based on your model binding.

于 2012-06-15T19:00:40.550 回答