ASP.NET MVC中MvcContrib.FluentHtml如何使用,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站制作、網站設計、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯(lián)網時代的阜陽網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
ASP.NET MVC
在MvcContrib.FluentHtml的應用中,我們隨處可以見到下面的代碼:
<%=this.TextBox(x=>x.Person.Name).Title("Entertheperson'sname").Label("Name:")%>
…… <%=this.Select(x=>x.Person.Gender).Options(Model.Genders).Size(5).Label("Gender:") .Title("Selecttheperson'sgender")%>
Name: . Male Female
這種實現(xiàn)編程方式就是"Fluent Interface",這并不是什么新概念,2005年Eric Evans 和Martin Fowler就為這種實現(xiàn)方式命名.源文檔
我們分解上面的話:
◆它是面向對象API的一種實現(xiàn)方式
◆目的是增加代碼的可讀性
既然我們最熟悉的是StringBuilder,我們就從這個線索追下去:打開Reflector,很容易找到StringBuilder的Append方法:
publicStringBuilderAppend(stringvalue) { if(value!=null) { stringstringValue=this.m_StringValue; IntPtrcurrentThread=Thread.InternalGetCurrentThread(); if(this.m_currentThread!=currentThread) { stringstringValue=string.GetStringForStringBuilder(stringValue,stringValue.Capacity); } intlength=stringValue.Length; intrequiredLength=length+value.Length; if(this.NeedsAllocation(stringValue,requiredLength)) { stringnewString=this.GetNewString(stringValue,requiredLength); newString.AppendInPlace(value,length); this.ReplaceString(currentThread,newString); } else { stringValue.AppendInPlace(value,length); this.ReplaceString(currentThread,stringValue); } } returnthis; }
了解了Fluent Interface,我們來看一下MVCContrib.FluentHTML的實現(xiàn),這里以TextBox為例進行考察,首先看一下它的繼承關系:
public class TextBox : TextInput< TextBox>
public abstract class TextInput< T> : Input< T>, ISupportsMaxLength where T : TextInput< T>
public abstract class Input< T> : FormElement< T> where T : Input< T>, Ielement
泛型是一種高層次的算法抽象,我們就通過Input< T>一窺端倪:
publicabstractclassInput
:FormElement whereT:Input ,IElement {
protectedobjectelementValue;
protectedInput(stringtype,stringname):base(HtmlTag.Input,name)
{
builder.MergeAttribute(HtmlAttribute.Type,type,true);
}
protectedInput(stringtype,stringname,MemberExpressionforMember,
IEnumerablebehaviors) :base(HtmlTag.Input,name,forMember,behaviors)
{
builder.MergeAttribute(HtmlAttribute.Type,type,true);
}
///
///Setthe'value'attribute.
///
///<paramnameparamname="value">Thevaluefortheattribute.
publicvirtualTValue(objectvalue)
{
elementValue=value;
return(T)this;
}
///
///Setthe'size'attribute.
///
///<paramnameparamname="value">Thevaluefortheattribute.
publicvirtualTSize(intvalue)
{
Attr(HtmlAttribute.Size,value);
return(T)this;
}
protectedoverridevoidPreRender()
{
Attr(HtmlAttribute.Value,elementValue);
base.PreRender();
}
}
關于ASP.NET MVC中MvcContrib.FluentHtml如何使用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。