none
asp.net mvc4中model与Model的区别 RRS feed

  • 问题

  • 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);
    }

    困惑啊!!请高手详细解释!不胜感谢!

    2013年9月14日 6:37

答案

  • 你好,

          希望我下面的回答可以帮到你。

    @model模型定义

     使用@model关键字可以定义一个Action里所对应的一个模型(经常可以叫他实体类),

    其实是对动态变量进行实例化,这样就可以直接在cshtml文件中调用“Model”变量。

    而这个模型的实例,需要通过Controller进行传输,如果没有则“Model”将为null

    模型可以是一个实体类,也可以是一个列表实例,字典对象都可以进行定义,但是和

    Controller中的Action传回来的实例一定要一样,否则将会出现错误。

    Model 定义

     MVC的第一个字母MModel,承载着View层和Controller之间的数据传输,是数据传输的载体,通过Model层,解偶了View层和Controller层。MVC框架中Model层的主要关注点是如何把请求的数据自动装配成Action所需要的bean,除此外,框架Model层还可以提供复合bean自动装配、输入校验、本地化及国际化、字符集编码转换、多重输出等功能。


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年9月16日 7:39
    版主

全部回复

  • 你好,

          希望我下面的回答可以帮到你。

    @model模型定义

     使用@model关键字可以定义一个Action里所对应的一个模型(经常可以叫他实体类),

    其实是对动态变量进行实例化,这样就可以直接在cshtml文件中调用“Model”变量。

    而这个模型的实例,需要通过Controller进行传输,如果没有则“Model”将为null

    模型可以是一个实体类,也可以是一个列表实例,字典对象都可以进行定义,但是和

    Controller中的Action传回来的实例一定要一样,否则将会出现错误。

    Model 定义

     MVC的第一个字母MModel,承载着View层和Controller之间的数据传输,是数据传输的载体,通过Model层,解偶了View层和Controller层。MVC框架中Model层的主要关注点是如何把请求的数据自动装配成Action所需要的bean,除此外,框架Model层还可以提供复合bean自动装配、输入校验、本地化及国际化、字符集编码转换、多重输出等功能。


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年9月16日 7:39
    版主
  • Model代表着从页面传过来的实体类的一个集合,可以是list集合,可以是IEnumber,看你最上面声明的是什么,比如@model IEnumber<MvcApp.Models.Product>那么Model就是一个IEnumber集合,你可以用foreach去遍历他,如果是@model List<MvcApp.Models.Produc>那么Model就是一个List集合,你可以想访问数组一样使用下标的方式去访问他,@model只是声明强类型的标志,moel => model.Name这个model只是你从页面穿过来的这个实体类的一个实例名称而已,你可以使用其它名称,m =>m.name,p=>p.Name都是可以的
    2017年1月12日 2:57