2

Visual Studio2012RCを.Net4.5ビットとT4MVCで実行しています。

私は自分の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アクション/アクションリンク私は単にモデルクラスの名前を取得します"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());

URLを生成するにはこれで十分です。パラメータの実際の値は、モデルバインディングに基づいて実行時に作成されます。

于 2012-06-15T19:00:40.550 に答える