公司使命:打造嘉兴技术实力最强的网络公司
服务项目:嘉兴网站建设 嘉兴网站制作 嘉兴网站优化
新闻中心

Razor中Model与model工作原理

发布时间:2014/5/8 10:10:42   文章来源:jiaxingweb   浏览:[  ]   评论:[  ]

    在Razor视图的开头总是要定义

@model MvcApp.Models.Product或
@model IEnumerable<MvcApp.Models.Product>
 
 
在这两语句中@model事实上是对模型的定义
 
就像C#中的 Product Mode=new Procuct();
 
当然使用@model关键字可以的是一个Action里所对应的一个模型(也就是说和Controllers类中Action方法所返回的类一致)(经常可以叫他实体类),
若与对应的Action中的模型不一致会出现什么样的结果呢!
那就是“Model”为null(也可能编译器出现错误)。
 
 
从上面的“Model”为null,可以看出“Model”中的值是通过Controller类中的Action方法进行传输的。这样就相当于Action方法对这个模型(Model)进行了实例化。
 
 
这样在Razor视图中“Model”就是Prodcut的实例,或者是Product实例的列表(分别对应上面的两个@model)
 
 
 
而在页面中还经常看到 
@Html.DisplayNameFor(model => model.Name)
@Html.DropDownListFor(model => model.Category, MvcApp.Code.SysFieldModels.GetSysField(Model), "请选择")
等样子的model,这里的model和上面提到的@model是完全不同的两个东西(前面提到的@model是对模型的定义),这里的model只是一个变量。是lambda的一个参数变量
model => model.Name可以理解为如下函数:
 
string 一个函数(Model的类型 model)
{
    return model.Name;
}
 
而有人会问那么lambda既然是一个函数,那么它怎么会有值呢(因为这句语句@Html.DisplayNameFor(model => model.Name)在页面中是现实对于的product的Name的)
 
    上面的只是一个比方,事实上在这里Lamdba是代表的一种委托,在页面razor被调用要展示出来的时候,就是对委托进行了实例化调用。
@Html.DisplayNameFor的方法如下
      public static MvcHtmlString DisplayFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression);
 
可以看出Func<TModel, TValue>是一个泛型委托。
 
评论
发表评论
评论内容:
昵称:
邮箱:
嘉兴网络公司 嘉兴网站建设 嘉兴网站制作 嘉兴建网站 嘉兴做网站 嘉兴网页制作 PE给水管 HDPE中空壁缠绕管 ABS管生产厂家
服务热线: 0573-82102225 15858312461 QQ: 56373131 E-mail: sales@jiaxingweb.com 地址: 嘉兴市南湖区富润路101号320室 浙ICP备09050985号
嘉兴网站建设-嘉兴网站制作-嘉兴网站优化-龙媒网络@嘉兴网络公司 www.jiaxingweb.com