Friday, 15 March 2013

asp.net mvc 3 - Html.DisplayFor ( or other htmlhelpers ) -



asp.net mvc 3 - Html.DisplayFor ( or other htmlhelpers ) -

i have question quite basic don't it. here comes.

if have view template file ( .cshtml ) , have codeline this:

@html.displayfor(m => m.currentpage.mainbody)

if on declaration displayfor looks this:

public static mvchtmlstring displayfor<tmodel, tvalue>(this htmlhelper<tmodel> html, expression<func<tmodel, tvalue>> expression);

so extension method takes look parameter tmodel , tvalue seems generic ( , apparently can send in lambda look expression).

how can lambda look here ( m => m.currentpage.mainbody ) know m is?

if have lamdba look this:

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; int oddnumbers = numbers.count(n => n % 2 == 1);

then context (n => n % 2 == 1) logic, lamdba look used evaluate each element in numbers.

but in case above @html.displayfor(m => m.currentpage.mainbody) context here? m referring to? somehow "magically" connected @model in particular view? ( in case is@model pageviewmodel<articlepage> ").

so sum up, m referring in look ( m => m.currentpage.mainbody ) ? assumed somehow refering model provided in view via @model?

how can lambda look here ( m => m.currentpage.mainbody ) know m is?

the html.displayfor helper defined this:

public static mvchtmlstring displayfor<tmodel, tvalue>( htmlhelper<tmodel> html, expression<func<tmodel, tvalue>> look ) { ... }

notice how helper can only invoked on typed htmlhelper<tmodel>. if not have typed view model cannot utilize html.displayfor helper because html on invoking extension method htmlhelper , not htmlhelper<tmodel>.

so within view when have model:

@model myviewmodel

the html property of type htmlhelper<myviewmodel> displayfor helper knows model.

basically when have typed view, html.displayfor(m => m.currentpage.mainbody) shortcut html.displayfor<myviewmodel, thetypeofyourmainbodyproperty>(m => m.currentpage.mainbody) compiler infer generic arguments context , don't need write them explicitly.

asp.net-mvc-3 razor

No comments:

Post a Comment