2012-05-02 57 views
0

我想在我的火花視圖中做以下事情。FubuMVC:我如何添加一個新的方法la DisplayFor

@{this.LinkTo("1234")} 

輸出類似

<a href="domain.tld?var=1234">1234</a> 

似乎原本應該我不能找到一個很好的辦法做到這一點。

大多數搜索「fubumvc htmlhelpers」最終都會給我更多關於msmvc中htmlhelpers的頁面。

如果我可以把代碼放在一個單獨的程序集中,我可以在多個站點之間共享,那麼將會是一個加號。

解決方案

 
namespace MyNamespace 
{ 
    public static class FubuPageExtensions 
    { 
     public static HtmlTag LinkTo(this IFubuPage page, string input) 
     { 
      return new LinkTag(input, "domain.tld?var={0}".ToFormat(input)); 
     } 
    } 
} 

...在我的火花視圖

 
<use namespace="MyNamespace" /> 

${this.LinkTo(Model.Something)} 

回答

0

我也有類似的要求,我解決了它這種方式(不知道這是最好的方法,但它適用於我的場景)。

的想法是創建IFubuPage接口,它返回一個新HtmlTag對象上的擴展方法。請注意,我使用的是Razor視圖引擎,並不完全確定這是否也適用於Spark。

因此,例如,下面的代碼將產生一個新的<簡稱/ >標籤:

public static HtmlTag TimeAgoFor(this IFubuPage page, DateTime input) 
{ 
    return new HtmlTag("abbr") 
     .Title(input.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssK")) 
     .AddClass("timeago") 
     .Text(input.ToString("dd-MM-yyyy HH:mm")); 
    } 
} 

在您的情況,我認爲這應該是足夠的,那麼:

public static HtmlTag LinkTo(this IFubuPage page, string input) 
{ 
    return new LinkTag(input, "domain.tld?var={0}".ToFormat(input)); 
} 
+0

我其實已經嘗試過這,但我只是得到一個「動態視圖編譯失敗」,指出我的方法不存在。除了在我自己的命名空間中創建擴展方法,我還沒有做過其他任何事情。我不知道Fubu是否會「神奇地」提取我的擴展方法,但似乎並沒有這樣做。 – Pingvinen

+0

在生成的視圖/錯誤屏幕中,您是否看到名稱空間正在導入?如果沒有,你需要導入它。 –

+0

我的命名空間未被引用,但是如何導入它? 目前未被考慮。 http://readthedocs.org/docs/fubumvc/en/latest/topics/viewengines/spark/usingspark.html#fubumvc-spark-limitations – Pingvinen

0

請確保您有你的spark文件中的「FubuPageExtensions」命名空間。

正如在評論中指出,使用在共享目錄下的「_global.spark」文件,以便所有.spark文件具有擴展名的命名空間。

0

我不知道這是否會吸引你,但你也可以聲明你的助手,該fubu.spark視圖引擎支持默認的命名空間之一,例如:

namespace FubuMVC.Core.UI 
{ 
public static class MyHelper{ 
public static HtmlTag LinkTo(this IFubuPage page, string input) 
{ 
    return new LinkTag(input, "domain.tld?var={0}".ToFormat(input)); 
} 
} 
} 
相關問題