0

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

@{this.LinkTo("1234")}

哪个应该输出类似

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

我似乎找不到这样做的好方法。

大多数搜索“fubumvc htmlhelpers”最终都会给我更多关于 msmvc 中的 htmlhelpers 的页面。

如果我可以将代码放在可以在多个站点之间共享的单独程序集中,那将是一个加分项。

解决方案

命名空间 MyNamespace
{
    公共静态类 FubuPageExtensions
    {
        public static HtmlTag LinkTo(这个IFubuPage页面,字符串输入)
        {
            return new LinkTag(input, "domain.tld?var={0}".ToFormat(input));
        }
    }
}

...在我的火花视图中

<use namespace="MyNamespace" />

${this.LinkTo(Model.Something)}
4

3 回答 3

0

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

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

因此,例如,以下代码将生成一个新的 <abbr /> 标记:

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));
}
于 2012-05-02T12:44:22.747 回答
0

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

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

于 2012-05-03T12:26:07.933 回答
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));
}
}
}
于 2012-05-30T02:25:39.807 回答