我認爲當頁面視圖呈現LabelFor被稱爲 與所描述的模型的引用自動,那 lambda函數告訴它如何得到它從模型所需要的信息?
我不完全相信我明白你對這部分的含義,我想你的意思是@LabelFor
如何知道使用哪種模型?
嗯,是的,如果你看一下syntax是這樣的:
public static MvcHtmlString LabelFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression
)
你可以看到第一個參數開始與this
這使得它一種推廣方法。當你添加行@model CurrencyMvc.Models.RegisterModel
this HtmlHelper<TModel>
成爲你的RegisterModel。
我不清楚爲什麼我們傳遞函數的時候我們可以通過 的實際值,例如, m.Username。
大部分時間是「λ表達式」是一個簡單的但Func<T>
與您在Expression<Func<TModel, TValue>>
這是一個lambda表達式樹數據結構通過剃刀@Html.xfor
(如@Html.LabelFor
)。通俗地說,一種未編譯的Func。
如果你通過m.Username
該方法只會有「Dale Burrell」。但例如,HTML文本框作爲
<input type="text" name="Username" value="Dale Burrell">
所以產生的,你可以看到,它實際上需要m.Username
變量名
哦,當這個助手叫哪裏「M」從何而來?
這只是一個變量。就像foreach(var m in dataset){}
「m從哪裏來?」 - 你做到了。你可以用任何東西代替米
好的,我認爲這對我來說是有意義的......它是一個漫長的一天,有很多新的信息。所以只是爲了澄清,爲簡單起見,我可以將LabelFor方法視爲在RegisterModel類中調用的方法(擴展)。然後在LabelFor方法中,它使用/調用'表達式'來獲取所需的值AND(大和這裏)也解構'表達式'以找出類中哪些屬性與值相關聯?從而考慮哪些屬性,驗證等等我是否在正確的軌道上? – 2012-01-05 09:35:12
嗯..是的,除了「(擴展)在我的RegisterModel」; '這個HtmlHelper'是HtmlHelper的擴展,其中TModel是你的模型。在剃刀中,您可以像Html一樣使用HtmlHelper。所以,如果你不使用它作爲擴展,你可以使用'HtmlHelper(RegisterModel,m => m.UserName)'來代替。 - 但其餘的,這聽起來是對的。僅用於術語;它不解構表達式,它用Expression.Compile()方法編譯它。 –
2012-01-05 09:57:38
是的,我想我正在接近我的頭,因爲它的HtmlHelp它將從內部引用我的RegisterModel的一個實例?所以當我調用Html.LabelFor()時,它知道我的RegisterModel對象。 (當沒有RegisterModel存在時,它創建一個空白的?)對不起,如果我看起來很愚蠢,只是試圖在我的腦海中清楚。另外,當我說解構,我的意思是編譯Lambda表達式時,它也必須使用表達式樹來確定哪個對象屬性來查詢例如屬性。 [顯示名稱)]? –
2012-01-05 10:08:51