Pét*_*ter 6 asp.net-mvc fluent-interface razor
我想在我的mvc网站上实现流畅的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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是如何在没有一些flush方法调用的剃刀视图中使用它.
@Html.UIproject().LinkButton()
.UIElementMethod("asd")
.ButtonBaseMethod("asd")
.LinkButtonMethod("asd")
Run Code Online (Sandbox Code Playgroud)
但它返回类的名称.我试图为MvcHtmlString创建一个隐式运算符,但它没有被调用.任何想法如何实现这一点.如何知道它是链和链.我喜欢 Kendo UI的工作方式.
谢谢,
Péter
您的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();
}
Run Code Online (Sandbox Code Playgroud)
如果您检查类中 Reflector/JustDecompile/dotPeek 中的 KendoUI,WidgetBase您将看到相同的模式。
| 归档时间: |
|
| 查看次数: |
875 次 |
| 最近记录: |