例如下面代码:
@Html.TextBoxFor(m => m.Addr)
在运行时将在页面里生成一个html控件:
<input id="Addr" name="Addr" type="text" value="sdfsdf" />
这里 input 标记固定写出,id、name、value 各属性中的值则是通过解析表达式获得。
解析过程是:
传入 textboxfor 函数的表达式是:
System.Linq.Expressions.Expression<Func<ModelType, string>>
把表达式的属性 body 转换为 expressions 空间中的一种类型:
System.Linq.Expressions.MemberExpression me =
e.Body as System.Linq.Expressions.MemberExpression;
me.Member.Name
就可得到:Addr,这就算 id、name 的值;
然后编译表达式:
var fun=e.Compile();
再执行:
fun(Model)