【问题标题】:How to implement fluent api in ASP.NET MVC?如何在 ASP.NET MVC 中实现流利的 api?
【发布时间】:2013-04-21 05:43:43
【问题描述】:

我想在我的 mvc 站点上实现 fluent api。我掌握了基础知识。 所以实现对象库如:

public class UIElement{/*...*/}
public class ButtonBase : UIElement{/*...*/}
public class LinkButton : ButtonBase {/*...*/}

  public static class Extensions
  {
    public static T UIElementMethod<T>(this T element, string title)
      where T : UIElement
    {
      return element;
    }

    public static T ButtonBaseMethod<T>(this T element, string title)
      where T : ButtonBase
    {
      return element;
    }

    public static T LinkButtonMethod<T>(this T element, string title)
      where T : LinkButton
    {
      return element;
    }
  }

但是如何在没有一些刷新方法调用的情况下在剃刀视图中使用它。

@Html.UIproject().LinkButton()
    .UIElementMethod("asd")
    .ButtonBaseMethod("asd")
    .LinkButtonMethod("asd")

但它返回类的名称。我试图为 MvcHtmlString 创建一个隐式运算符,但它没有被调用。 任何想法如何实现这一点。如何知道它是链条的和。我喜欢Kendo UI 的工作方式。

谢谢,
彼得

【问题讨论】:

  • 请不要将“ASP.NET MVC”简称为“MVC”。一种是框架,另一种是与语言无关的设计模式。这就像调用 IE - “互联网”

标签: asp.net-mvc razor fluent-interface


【解决方案1】:

您的UIElement 类需要实现IHtmlString 接口。这个接口的ToHtmlString 方法被 Razor 调用,应该返回一个 HTML 编码的字符串。

所以我将在抽象基 UIElement 上实现它并创建 RenderHtml 方法,该方法可以由具体的 LinkButton 等类实现:

public abstract class UIElement : IHtmlString 
{
    public string ToHtmlString()
    {
        return RenderHtml(); // This should return an HTML-encoded string.
    }

    public override string ToString()
    {
        return ToHtmlString();
    }

    protected abstract string RenderHtml();
}

如果您在 WidgetBase 类的 Reflector/JustDecompile/dotPeek 中检查 KendoUI,您将看到相同的模式。

【讨论】:

    【解决方案2】:

    在这种特殊情况下,我还没有尝试过,但您也许可以使用隐式转换从流利的构建器转换为您需要的对象(请参阅blog)。

    【讨论】:

      猜你喜欢
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2017-07-07
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多