2010-03-04 67 views
17

我一直在使用T4MVC(FYI:v2.6.62)已經有相當長的一段時間了,我一直在慢慢地將代碼轉移到這種工作方式(對magic strings的依賴較少)。Strongly-typed T4MVC Action/ActionLink

但我不得不停止,因爲,出於某種原因,T4MVC無法對象轉化爲URL和似乎只能夠在基本類型(int /字符串/等)工作。

下面是一個例子:

路線擊穿:

/MyController/MyAction/{Number}/{SomeText} 

類別:

namespace MyNamespace 
{ 
    public class MyClass 
    { 
    public int Number { get; set; } 
    public string SomeText { get; set; } 
    } 
} 

控制器:

public class MyController 
{ 
    public virtual ActionResult MyAction(MyClass myClass) 
    { 
    return View(); 
    } 
} 

查看:

<%= Html.Action(
    T4MVC.MyController.Actions.MyAction(
    new MyClass() 
    { 
     Number = 1, 
     SomeText = "ABC" 
    } 
) %> 

最終的結果是這樣的:

/MyController/MyAction?myClass=MyNamespace.MyClass 

,而不是

/MyController/MyAction/1/ABC 

沒有任何人有這個問題? T4MVC的網址是否可用?

還有問題在ASP.NET Forum

回答

17

更新(10/11/2012):最近添加的Model Unbinders支持(請參閱doc中的第3.1節)應該涵蓋很多這些情況。

原來的答覆:

forum thread複製我的回答是:

嗯,我不認爲這又拿出了呢。也許在大多數情況下,人們擁有采用對象的Action方法,對象的值來自發布的表單數據,而不是通過URL傳遞?在這種情況下,問題不會出現。

我想理論上T4MVC可以改變來支持這個。它只需要將所有對象的頂級屬性提升爲路由值,而不是試圖使用對象本身(顯然,當前行爲是假的,並且是僅僅盲目地調用ToString()的結果)。

有其他人碰到這一點,認爲這是值得解決?

+1

嗨大衛。謝謝回覆。我猜測,鑑於在短時間內有5次上調意味着這意味着這可能是理想的功能。 :-) – 2010-03-04 20:39:08

+0

好的,我會把它放在TODO清單上! :) – 2010-03-04 21:15:19

+0

謝謝!我會發現它特別有用,因爲我創建了一些ActionResults,比如使用T4MVC風格動作的PermanentRedirectResult,這種功能將非常棒,不僅僅適用於視圖! – 2010-03-05 09:00:06

4

如果我理解正確的問題,那麼下面的語法應該讓你解決這個問題。

<%= Html.ActionLink("test", MVC.MyController.MyAction().AddRouteValues(new MyClass() { Number = 5, SomeText = "Hello" })) %> 

我想答案,使語法更好的將包裹每個非值類型參數的RouteValueDictionary於各所產生的行動結果的方法,

編輯:(迴應評論,因爲沒有足夠的字符)

好吧我設法重新使用此方法的上面的簡單示例給:/MyController/MyAction/5/Hello作爲URL。 我不太清楚嵌套複雜類型在實踐中會如何泛化。您可以使用某種遞歸方式深入到頂層對象中,並反映這些值以添加它們,但是隨後您會打開一組新的問題,例如如何處理與父級相同的子屬性名稱屬性名稱。 這似乎可能是一個複雜的問題來解決,以一種適用於每個人的方式。 也許某種適配器模式對於將複雜對象轉換爲路由值非常有用。在最簡單的情況下,這可能是聲明一個擴展方法ToRouteDictionary,它作用於複雜類型,並使用您應該如何工作的知識來轉換它。只是想大聲,因爲我顯然不知道你的用例

+0

恐怕這是行不通的。它返回路由值,但是它們的url沒有正確地形成。 此外,如果使用這種包裝非值類型的方法修復它,則需要遞歸執行此操作,因爲您可以使用包含其他複雜類型的複雜類型... – 2010-03-09 10:10:41

+0

爲響應上述註釋而編輯 – PabloBlamirez 2010-03-09 11:44:11