FubuMVC:如何在DisplayFor中添加新方法

时间:2012-05-02 10:56:15

标签: fubumvc

我想在我的火花视图中执行以下操作。

@{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)}

3 个答案:

答案 0 :(得分:0)

我有类似的要求,我用这种方式解决了(不确定这是否是最佳方法,但它适用于我的方案)。

我们的想法是在 IFubuPage 界面上创建一个扩展方法,该方法返回一个新的 HtmlTag 对象。请注意,我正在使用Razor视图引擎,并不完全确定它是否适用于Spark。

因此,例如,以下代码将生成一个新的&lt; abbr /&gt; tag:

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));
}

答案 1 :(得分:0)

确保您的spark文件中有“FubuPageExtensions”命名空间。

如评论中所述,在共享目录中使用“_global.spark”文件,以便所有.spark文件都具有扩展名称空间。

答案 2 :(得分:0)

我不知道这是否会吸引您,但您也可以在fubu.spark viewengine支持的默认命名空间之一中声明您的帮助程序,例如:

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));
}
}
}