模型

MVC Model

     MVC中的模型,可以理解为那些发送信息到数据库,执行业务计算并在视图中渲染的模型对象。换句话说,这些对象代表着应用程序关注的域,模型就是要显示、保存、创建、更新和删除的对象。
     那么创建MVC Model我们需要注意什么呢?MVC模板提供了启动应用程序需要的所有项:一个基本的布局视图、一个带有用户登录链接的默认首页、一个初始的样式表和一个相对较空的Models文件夹。Models文件夹中有两个文件:AccountViewModels.cs以及IdentityModels.cs文件。这两个文件都与用户账户管理有关。

构造基架

      须知,当我们创建视图时,会有模板供我们使用,这种代码生成的过程就叫做“基架”。ASP.NET MVC中的基架可以为应用程序的创建、读取、更新和删除(CRUD)功能生成所需的样板代码。基架模板检测模型类的定义,然后生成控制器以及与该控制器关联的视图,有些情况下还会生成数据访问类。如果我们不喜欢默认的基架,也可以在NuGet库中查找可替代的基架模板。

                           

基架和实体框架

      新建的ASP.NET MVC5x项目会自动包含对实体框架的引用。EF是一个对象关系映射框架,它不但知道如何在关系型数据库中保存.NET对象,而且还可以利用LINQ查询语句检索那些保存在关系型数据库中的.NET对象。EF支持s数据库优先、模型优先h和代码优先(是指可以在不创建s数据库模式、也不打开VS设计器的情况下,向SQL Server中存储或检索信息)的风格。可以编写纯C#类,因为EF知道如何将这些类的实例c存储到正确位置。模型对象中的所有属性都是虚拟的,虚拟属性不是必需的,d但是它们给EF提供了一个指向纯C#类集的钩子(hook),并未EF启用了一些特性,如高效的修改跟踪机制。EF需要知道模型属性值的修改时刻,因为它要在这一时刻s生成并执行一个sql uodate语句,使这些改变和数据库保持一致。

模型绑定

      Edit视图会将表单中的值提交给服务器,若是为了更新某些值,可能会从请求中直接提取这些值:

如图所示,这样获取表单提交的值,无疑在需要获取较多值的情况下使代码变得冗长。因此我们可以考虑从Form集合中提取属性并将这些值存储在某属性中,而且任何不是z字符串类型的s属性都需要进行类型转换。幸运的是,Edit视图认真的命名了每一个表单输入来匹配某些属性。因此,我们可以根据命名约定编写一段通用代码来解决这个问题。
 


        [HttpPost]
        public ActionResult Edit(Album album)
        {
            if (ModelState.IsValid)
            {
                db.Entry(album).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId);
            ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
            return View(album);
        }

当操作带有一个参数时,MVC运行环境就会使用一个模型绑定器来构建这个参数。在MVC运行时中,可以为不同类型的模型注册多个模型绑定器,一般情况下默认的绑定器是DefaultModelBinder。在Album对象的情形中,默认的模型绑定器检查Album类,并查找n能用于绑定的所有Album属性。遵照命名约定,默认的模型绑定器n能自动地将请求中的值转换和移入到一个Album对象中(模型绑定器也可以创建一个对象实例来填充)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值