asp.net-mvc如何写流利语法 HtmlHelper

发布时间: 2016/10/9 6:15:12
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个简单的标签生成器,看起来像这样︰

public static MvcHtmlString Tag(this HtmlHelper helper, string tag, string content)
{
    var tagBuilder = new TagBuilder(tag){InnerHtml = content};
    return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.NormalTag));
}

并且,我可以像这样使用它︰

@Html.Tag("em", Model.Title)

产生︰

<em>The Title</em>

如何可以这写使用流利的语法,所以它的使用会像这样︰

@Html.Tag("em").Content(Model.Title)

解决方法 1:

您必须定义生成器接口和实现。我希望我的例子可以提供一些指导︰

public static class MyHtmlExtensions
{
    public static IMyTagBuilder Tag(this HtmlHelper helper, string tag)
    {
        return new MyTagBuilder(tag);
    }
}

然后您定义生成器界面和执行︰

public interface IMyTagBuilder : IHtmlString
{
    IHtmlString Content(string content);
}

public class MyTagBuilder : IMyTagBuilder
{
    private readonly TagBuilder _tagBuilder;

    public MyTagBuilder(string tag)
    {
        _tagBuilder = new TagBuilder(tag);
    }

    public IHtmlString Content(string content)
    {
        _tagBuilder.InnerHtml = content;
        return this;
    }

    public string ToHtmlString()
    {
        return _tagBuilder.ToString(TagRenderMode.NormalTag);
    }
}

因为 IMyTagBuilder 实现 IHtmlString ,它可以用带或不带电话 .Content() 之后。

一个伟大的技巧,使用时实现流利接口它使用 IFluentInterface 来隐藏对象的成员 ( ToStringEqualsGetHashCodeGetType ) 从智能感知,它去除了一些噪音。

编辑︰ 最大的资源建设 fluent Api 是从建筑 Funq 丹尼尔卡祖利诺的截屏视频在这里

赞助商