asp.net mvc4中model与Model的区别

寂寞沙洲 2013-09-14 02:51:42
Index.chhtml页面上:
@model IEnumerable<MvcApp.Models.Product>

<th>
@Html.DisplayNameFor(model => model.Name)
</th>
还有代码:
@foreach (var item in Model) {

而Edit.cshtml页面上,也有类似的代码:
@model MvcApp.Models.Product

@Html.EditorFor(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);
}


困惑啊!!请高手详细解释!不胜感谢!
...全文
662 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-09-15
  • 打赏
  • 举报
回复
看来你对Lambda完全不懂。 Lambda表达式相当于一个函数。 比如model => model.Name 相当于 string 一个函数(Model的类型 model) { return model.Name; } 看到了么?model是形参,这个名字无所谓的。你写 string 一个函数(Model的类型 x) { return x.Name; } 这两个函数是不是完全等价的? 因此 model => model.Name 和 x => x.Name 也是等价的。
寂寞沙洲 2013-09-15
  • 打赏
  • 举报
回复
model是Lambda中的参数名,这个可以随便叫.但下面这句如何理解: @Html.EditorFor(model => model.Name),从这句看,好像model也是传过来的数据。因为这句代码 在页面上显示了文本框,文本框中是供用户编辑的值啊!如果model仅仅是参数名,文本框怎会有值呢?
threenewbee 2013-09-14
  • 打赏
  • 举报
回复
model是Lambda中的参数名,这个可以随便叫,叫 x y z 都可以。 就好比你定义一个函数,你可以任意起名函数的参数名,只要函数体中所有的名字都和它对应就可以了,对于函数外部,这个名字无所谓。 你可以简单地将model视作集合中的一个元素。 Model是View传给你的表示模型的变量。
饕餮123 2013-09-14
  • 打赏
  • 举报
回复
model => model.Name这个是lamba 表示函数式 想通了吗

62,233

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧