2013-04-21 13 views
6

Chcę zaimplementować płynne API dla moich witryn mvc. Mam podstawy. więc wdrożyć biblioteki obiektów takich jak:Jak zaimplementować płynne API w ASP.NET MVC?

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

ale jak go używać w widoku z ostrzami bez jakiejś metody flush powołania.

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

Ale zwraca nazwę klasy. Próbowałem wykonać niejawny operator MvcHtmlString, ale nie został wywołany. Każdy pomysł, jak to osiągnąć. Jak się dowiedzieć, czym jest łańcuch. Podoba mi się sposób, w jaki działa Kendo UI.

Dzięki,
Péter

+0

Proszę, przestań odwoływać się do "ASP.NET MVC" po prostu jako "MVC". Jeden to framework, a drugi to niezależny od języka wzór projektu. To tak, jakby dzwonić do IE - "internet" –

Odpowiedz

4

Twoje klasy UIElement muszą implementować interfejs IHtmlString. Ta metoda interfejsu ToHtmlString zostaje wywołana przez urządzenie Razor i powinna zwrócić kod zakodowany w HTML.

Więc chciałbym zaimplementować to na abscract bazy UIElement i tworzyć RenderHtml metody, które mogą być realizowane przez betonową LinkButton itd klasy:

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

Jeśli zaznaczysz KendoUI odbłyśnikiem/JustDecompile/dotPeek w WidgetBase klasy zobaczysz ten sam wzór.

+0

Genialny !!!!!!! –

0

nie próbowałem go, w tej konkretnej sytuacji, ale może być w stanie używać niejawny obsady przekonwertować z płynnym konstruktora do obiektu trzeba (patrz ten blog).

Powiązane problemy