2012-06-15 20 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

相關問題