Index.chhtml页面上:
@model IEnumerable<MvcApp.Models.Product><th>
@Html.DisplayNameFor(model => model.Name)
</th>
还有代码:
@foreach (var item in Model) {而Edit.cshtml页面上,也有类似的代码:
@model [email protected](model => model.Name)@Html.DropDownListFor(model => model.Category, MvcApp.Code.SysFieldModels.GetSysField(Model), "请选择")------------------个人的理解:model仅仅声明类型,Model是从控制器传过来给View的数据。但发现这样理解有问题,因为Edit.cshtml页面上,有代码:@Html.EditorFor(model => model.Name),从这句看,好像model也是传过来的数据。但下面又有:@Html.DropDownListFor(model => model.Category, MvcApp.Code.SysFieldModels.GetSysField(Model), "请选择"),看这句,好像Model里也是传过来的数据?GetSysField()方法的代码如下:public static SelectList GetSysField(Product p)
{
SportsStoreDbContext db = new SportsStoreDbContext();
var c = db.Products.Select(x => x.Category).Distinct().OrderBy(x => x); return new SelectList(c, p.Category);
}
困惑啊!!请高手详细解释!不胜感谢!
@model IEnumerable<MvcApp.Models.Product><th>
@Html.DisplayNameFor(model => model.Name)
</th>
还有代码:
@foreach (var item in Model) {而Edit.cshtml页面上,也有类似的代码:
@model [email protected](model => model.Name)@Html.DropDownListFor(model => model.Category, MvcApp.Code.SysFieldModels.GetSysField(Model), "请选择")------------------个人的理解:model仅仅声明类型,Model是从控制器传过来给View的数据。但发现这样理解有问题,因为Edit.cshtml页面上,有代码:@Html.EditorFor(model => model.Name),从这句看,好像model也是传过来的数据。但下面又有:@Html.DropDownListFor(model => model.Category, MvcApp.Code.SysFieldModels.GetSysField(Model), "请选择"),看这句,好像Model里也是传过来的数据?GetSysField()方法的代码如下:public static SelectList GetSysField(Product p)
{
SportsStoreDbContext db = new SportsStoreDbContext();
var c = db.Products.Select(x => x.Category).Distinct().OrderBy(x => x); return new SelectList(c, p.Category);
}
困惑啊!!请高手详细解释!不胜感谢!
表示函数式
想通了吗
就好比你定义一个函数,你可以任意起名函数的参数名,只要函数体中所有的名字都和它对应就可以了,对于函数外部,这个名字无所谓。你可以简单地将model视作集合中的一个元素。Model是View传给你的表示模型的变量。
@Html.EditorFor(model => model.Name),从这句看,好像model也是传过来的数据。因为这句代码
在页面上显示了文本框,文本框中是供用户编辑的值啊!如果model仅仅是参数名,文本框怎会有值呢?
Lambda表达式相当于一个函数。比如model => model.Name
相当于
string 一个函数(Model的类型 model)
{
return model.Name;
}
看到了么?model是形参,这个名字无所谓的。你写
string 一个函数(Model的类型 x)
{
return x.Name;
}
这两个函数是不是完全等价的?
因此
model => model.Name
和
x => x.Name
也是等价的。