ASP.NET MVC 5 -从控制器访问数据模型

10 篇文章 1 订阅
订阅专栏

在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里。

在开始下一步前,先Build一下应用程序(生成应用程序)(确保应用程序编译没有问题)

解决方案上,用鼠标右键单击Controller文件夹,点击新增,再选择Controller

Scaffold**新增对话框,选择MVC 5 Controller with views, using Entity Framework**, 点击新增。

· 控制器(Controller)名称输入: MoviesController.

· 模型类(Model class)选择: Movie (MvcMovie.Models) .

· 数据上下文类(Data context class)选择:MovieDBContext (MvcMovie.Models)

下图显示了完成的对话框。 

单击添加(如果你得到一个错误,则很可能增加控制器前,没有生成该应用程序)。Visual Studio Express 会创建以下文件和文件夹:

· 项目控制器文件夹中的MoviesController.cs文件。

· 项目视图文件夹下的 Movie文件夹。

· 在新的Views\Movies文件夹中创建Create.cshtml、 Delete.cshtml、 Details.cshtml、 Edit.cshtmlIndex.cshtml 文件。

Visual Studio自动创建 CRUD(创建、 读取、 更新和删除) 操作方法,和相关的视图文件(CRUD 自动创建的操作方法和视图文件被称为 scaffolding)。 现在您有了可以创建、列表、 编辑和删除电影Entity 所有的Web功能了。

运行应用程序,通过将/Movies追加到浏览器地址栏 URL的后面,从而浏览Movies控制器。因为应用程序依赖于默认路由 ( App_Start\RouteConfig.cs 文件中的定义),浏览器请求 http://localhost:xxxxx/Movies将被路由到Movies控制器默认的Index 操作方法。换句话说,浏览器请求 http://localhost:xxxxx/Movies等同于浏览器请求 http://localhost:xxxxx/Movies/Index。因为您还没有添加任何内容,所以结果是一个空的电影列表。

创建电影

点击Create New链接。输入有关电影的一些详细信息,然后单击Create按钮。

注意:您可能无法在“价格”字段中输入小数点或逗号。要支持非英语语言环境,小数点用逗号(","),和非美国英语的日期格式的jQuery验证,你必须包括globalize.js,和你的具体文化/ globalize.cultures.js的文件(从 https://github.com/jquery/globalize)和JavaScript使用Globalize.parseFloat的。在接下来的教程中,我将展示如何做到这一点。现在,只需输入整数,如10。

单击Create按钮将使得窗体提交至服务器,同时电影信息也会保存到数据库里,然后您会被重定向到/Movies 的URL,您可以在列表中看到刚刚创建的新电影。

创建一些更多的电影数据(movie entries)。 同时也可以尝试点击编辑详细信息删除功能的链接。

看一下生成的代码

打开Controllers\MoviesController.cs文件,并找到生成的Index方法。一部分电影控制器和Index方法如下所示。

public class MoviesController : Controller
{
  private MovieDBContext db = new MovieDBContext(); // GET: /Movies/

  public ActionResult Index()
  {
    return View(db.Movies.ToList());
  }
}

Movies控制器请求,从而返回Movies电影数据库表中的所有记录,然后将结果传递给Index视图。下面是MoviesController类中实例化电影数据库上下文实例,如前面所述。电影数据库上下文实例可用于查询、 编辑和删除的电影。

private MovieDBContext db = new MovieDBContext();
强类型模型和 @model 关键字

在本系列前面教程中,您看到了使用ViewBag对象,从控制器传递数据或对象给视图模板。ViewBag是一个动态的对象,提供了方便的后期绑定(late-bound)方法将信息传递给视图。

MVC 还提供了传递强类型对象(strongly typed objects)到视图模板的能力。这种强类型使得更好的在编译时检查您的代码, 并在Visual Studio 编辑器中提供更加丰富的 智能感知.aspx)( IntelliSense.aspx))。 当创建操作方法和视图时, Visual Studio 中的scaffolding机制(也就是通过一个强类型的模型)使用了MoviesController类和视图模板。

Controllers\MoviesController.cs文件中看一下生成的Details方法。电影控制器里的Details方法如下所示。

public ActionResult Details(int? id)
{
  if (id == null)
  {
    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
  }
  Movie movie = db.Movies.Find(id);
  if (movie == null)
  {
    return HttpNotFound();
  }
  return View(movie);
}

id参数一般是通过路由数据传递. 例如  http://localhost:1234/movies/details/1 会设置电影控制器的控制,该方法操作details并设置id为1。 你也可以通过一个查询字符串(query string) 的id如下:  http://localhost:1234/movies/details?id=1

如果查找到了一个MovieMovie 模型的实例会传递给Detail视图。

return View(movie);

看一下Views\Movies\Details.cshtml文件里的内容。

@model MvcMovie.Models.Movie @{ ViewBag.Title = "Details"; } <h2>Details</h2> <div> <h4>Movie</h4> <hr /> <dl class="dl-horizontal"> <dt>

            @Html.DisplayNameFor(model => model.Title)

</dt>

         @*Markup omitted for clarity.*@        

</dl> </div> <p>

    @Html.ActionLink("Edit", "Edit", new { id = Model.ID }) |
    @Html.ActionLink("Back to List", "Index")
</p>

通过引入视图模板文件顶部的@model语句,您可以指定该视图期望的对象类型。当您创建电影控制器时,Visual Studio 会将@model声明自动包含到Details.cshtml文件的顶部:

@model MvcMovie.Models.Movie

@model声明使得控制器可以将强类型的Model对象传递给View视图, 从而您可以在视图里访问传递过来的强类型电影Model。 例如,在Details.cshtml模板中,每部电影的字段,通过代码传递了DisplayNameFor和 DisplayFor.aspx) HTML Helper通过强类型的Model对象。Create和Edit方法还有视图模板都在传递电影的强类型模型对象。

看一下Index.cshtml视图模版和MoviesController.cs中的Index 方法。请注意这些代码是如何在Index操作方法中,创建 List对象,并调用View方法的。

此代码在控制器中传递Movies列表给视图:

public ActionResult Index()
{
    return View(db.Movies.ToList());
}

当您创建电影控制器时,Visual Studio会自动包含 @model语句到Index.cshtml文件的顶部

@model IEnumerable<MvcMovie.Models.Movie>

@model声明使得控制器可以将强类型的电影列表Model对象传递给View视图。例如,在Index.cshtml模板中,在强类型的Model对象上使用foreach语句循环遍历电影列表:

@foreach (var item in Model) { <tr> <td>

            @Html.DisplayFor(modelItem => item.Title)

</td> <td>

            @Html.DisplayFor(modelItem => item.ReleaseDate)

</td> <td>

            @Html.DisplayFor(modelItem => item.Genre)

</td> <td>

            @Html.DisplayFor(modelItem => item.Price)

</td> <th>

            @Html.DisplayFor(modelItem => item.Rating)

</th> <td>

            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
            @Html.ActionLink("Details", "Details", { id=item.ID })  |
            @Html.ActionLink("Delete", "Delete", { id=item.ID })

</td> </tr>

}

因为Model对象是强类型的 (是IEnumerable&lt;Movie&gt;对象),所以在循环中的每个item对象的类型是Movie类型。好处之一是,这意味着您可以在代码编译时进行检查,同时在代码编辑器中支持更加全面的智能感知:

使用SQL Server LocalDB

Entity Framework Code First(代码优先),如果检测到不存在一个数据库连接字符串指向了Movies数据库,会自动的创建数据库。在App_Data文件夹中找一下,您可以验证它已经被创建了。如果您看不到Movies.mdf文件,请在解决方案资源管理器工具栏上,单击显示所有文件按钮,单击刷新按钮,然后展开App_Data文件夹。

双击Movies.mdf打开数据库资源管理器(SERVER EXPLORER),然后展开文件夹(Tables) 以查看电影表。

注意:ID旁边的钥匙图标。默认情况下,EF将创建一个名为ID的主键。欲了解更多EF和MVC信息,请参阅Tom Dykstra's的优秀教程 MVC and EF。

在Movies表上单击鼠标右键,并请选择显示表数据(Show Table Data)看您所创建的数据。

在Movies表上单击鼠标右键,并请选择打开表定义(Open Table Definition), 您将看到Entity Framework Code First创建的表结构。

注意事项: Movies表映射到Movie类的架构(schema)如何你前面创建的。Entity Framework Code First首先自动为您创造了这个架构(schema)基于Movie class。当您完成后,通过右击MovieDBContext,并选择关闭连接。 (如果你不关闭连接,下一次运行项目,你可能会得到一个错误)。

现在,您可以在这个简单列表页面里:显示、编辑、更新、删除数据库里的数据了。在下一次的教程中,我们会继续看看scaffolded自动生成的其它代码。并添加一个SearchIndex方法和SearchIndex视图,使您可以在数据库中搜索电影了。更多关于Entity Framework with MVC, see  Creating an Entity Framework Data Model for an ASP.NET MVC Application.

ASP.NET MVC4入门教程(五):从控制器访问数据模型
10-22
本文介绍ASP.NET MVC4中在创建控制器的时候,同时使用Entity Framework为模型生成增删改查等方法,方便控制器调用。
ASP.NET MVC 5入门指南(中文PDF+源码)
10-06
ASP.NET MVC 5 - 从控制器访问数据模型 8. ASP.NET MVC 5 - 验证编辑方法和编辑视图 9. ASP.NET MVC 5 - 给电影表和模型添加新字段 10. ASP.NET MVC 5 - 给数据模型添加校验 11. ASP.NET MVC 5 - 查询Details和...
mvc连接mysql数据库操作_laravel中mvc数据库操作
weixin_30878135的博客
01-27 353
控制器在Laravel的MVC结构中,控制器属于C部分,链接M(modal)和V(view)层,将modal层的数据通过脚本动态添加到view层中。创建控制器使用命令行模式,切换到laravel根路径下,执行:php artisan make:controller MemberController这个创建好的controller放在,laravel根路径下App/Http/Controller/下...
Entity Framework 学习笔记(二)之数据模型 Model 使用过程
02-05 148
Entity Framework 数据模型Model 创建的使用: 开发环境:VS2012 数据库SQL Server 2008 Entity Framework 版本:6.12 下面是新建的项目架构:(当然这是我的项目架构,只是参考) 1.新建项目 新建一个控制台项目即可 :Future.LifeWillBetter.DAL.ForModel.C...
MVC5】6.从控制器访问您的模型的数据
VIProgram的博客
07-14 2753
在这一部分中,您将创建一个新的moviescontroller类写代码,检索数据并将其显示在电影中使用视图模板浏览。 在进行下一步之前建立应用程序。如果你不建立应用程序,你会得到一个错误添加一个控制器。 在“解决方案资源管理”中,右键单击“控制器”文件夹,然后单击“添加”,然后单击“控制器”按钮。 在“添加材料”对话框中,单击“MVC 5控制器和视图,使用实体框架
详解Asp.Net MVC——控制器与动作(Controller And Action)
10-20
总的来说,Asp.Net MVC中的控制器和动作方法是构建Web应用的核心,它们负责接收请求,处理业务逻辑,与模型交互,并返回响应。理解并熟练运用控制器和动作方法是掌握ASP.NET MVC框架的关键。通过继承Controller类并...
ASP.NET编程知识】ASP.NET MVC从视图传参到控制器的几种形式.docx
最新发布
05-17
"ASP.NET MVC从视图传参到控制器的几种形式" 在ASP.NET MVC中,从视图传参到控制器是非常常见的操作场景。下面将介绍从视图传参到控制器的几种形式。 1. 传递数组 在视图中,可以使用JavaScript的ajax方法将数组...
ASP.NET MVC 5 - 控制器
11-14 180
MVC代表: 模型-视图-控制器MVC是一个架构良好并且易于测试和易于维护的开发模式。基于MVC模式的应用程序包含: · Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据类。 · Views: 应用程序动态生成 HTML所使用的模板文件。 · Controllers: 处理浏览的请求,取得数据模型,然后指定要响应浏览请求的视图模板。 本系列教程,...
SpringMVC框架
05-22
SpringMVC作为目前JavaEE企业级应用开发中使用最为广泛的控制器层框架,一直以来受到了各大互联网公司和广大开发人员的认可,本课程中老师带领大家全面的分析了JavaEE企业级应用开发中控制器层普遍需要解决的问题,更容易让学生接受。 每一个案例都经过了精心的打磨和设计,跟着老师的节奏,你将快速全面的掌握 SpringMVC框架的实战应用。
ASP.NET MVC 5 - 给电影表和模型添加新字段
weixin_34161029的博客
02-26 179
在本节中,您将使用Entity Framework Code First来实现模型类上的操作。从而使得这些操作和变更,可以应用到数据库中。默认情况下,就像您在之前的教程中所作的那样,使用 Entity Framework Code First自动创建一个数据库,Code First为数据库所添加的表,将帮助您跟踪数据库是否和从它生成的模型类是同步的。如果他们不是同步的,Entity Framewo...
ASP.NET MVC 5 - 将数据从控制器传递给视图
weixin_34244102的博客
12-17 243
在我们讨论数据库数据模型之前,让我们先讨论一下如何将数据从控制器传递给视图。控制器类将响应请求来的URL。控制器类是给您写代码来处理传入请求的地方,并从数据库中检索数据,并最终决定什么类型的返回结果会发送回浏览。视图模板可以被控制器用来产生格式化过的HTML从而返回给浏览控制器负责给任何数据或者对象提供一个必需的视图模板,用这个视图模板来Render返回给浏览的HTML。最佳做法是:一个...
APS.NET_MVC5学习笔记-入门
Programmer_XiaoLin
04-14 1777
入门 运行  Visual Studio 2013开始这个实例。 Visual Studio是一个IDE集成开发环境。就像您使用Microsoft Word来编写文档,你可以使用集成开发环境(IDE)来创建一个应用程序。在Visual Studio中的一个顶部工具栏中显示了各种不同的选项来供您使用。在IDE中还有一个菜单,提供了另一种方式来执行任务。(例如,您可以不从“开始”页面中,选择“新建
mvc 添加控制器时运行所选代码生成出错,未能加载文件或者程序集或他的一个依赖项
winnieFighting
12-27 4189
在创建controller时,出现了这个错误,未能加载facade.dll文件或者程序集或他的一个依赖项。 解决办法:清理解决方案和一些没有用的文件。比如我们的就是清理了一下解决方案,然后把我的文件里没用的之前没有删掉的文件删除了,可以只清理解决方案就可以,可能每个人出的问题不同,但是先清理解决方案就没毛病。 ...
MVC5中的区域(Areas)
热门推荐
xiaoguidangjiajia的博客
03-08 1万+
MVC5中的区域(Areas)
ASP.NET MVC 5 - 添加一个模型
weixin_33727510的博客
01-10 118
在本节中,您将添加一些类,这些类用于管理数据库中的电影。这些类是ASP.NET MVC 应用程序中的"模型(Model)"。您将使用.NET Framework 数据访问技术Entity Framework,来定义和使用这些模型类。Entity Framework(通常称为 EF) 是支持代码优先 (Code First) 的开发模式。代码优先允许您通过编写简单的类来创建对象模型。(相对于"原始的...
asp.netMvc3电影商店之mvc初体验
weixin_34362790的博客
01-14 317
本文作者是Rick Anderson 下面的是原文网址 http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/intro-to-aspnet-mvc-3 By Rick Anderson, Rick Anderson works as a programmer writer for...
asp.net mvc 实现登录的控制器代码
03-11
以下是一个简单的 ASP.NET MVC 登录控制器代码示例: ``` [HttpPost] public ActionResult Login(LoginViewModel model) { if (ModelState.IsValid) { if (Membership.ValidateUser(model.UserName, model....

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • java 用itext设置pdf纸张大小 12364
  • SecureCRT部署java项目 1528
  • no MsmqJava in java.library.path 1399
  • 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 843
  • ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB 811

分类专栏

  • msmq 1篇
  • PAT 2篇
  • JAVA 5篇
  • 其他 1篇
  • asp.net 10篇

最新评论

  • java 用itext设置pdf纸张大小

    jcj_gyjf: 283.0F, 425.0F这两个值从哪来的?该如何计算?

  • java 用itext设置pdf纸张大小

    夕阳下的草垛: 感谢大佬,收藏收藏

  • java 用itext设置pdf纸张大小

    夕阳下的草垛: 分享技术,不错哦

  • java 用itext设置pdf纸张大小

    夕阳下的草垛: 分享技术,不错哦

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
  • Tomcat7部署WebService :Error listenerStart
  • ASP.NET MVC 5 - 给数据模型添加校验器
2018年1篇
2017年18篇
2016年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司广安网站seo优化哪家好同乐百度标王多少钱宝安百度标王多少钱长治网站优化软件哪家好宜春SEO按天计费推荐龙岩关键词按天计费价格商丘网站建设设计价格鄂州建网站报价朔州网站优化推广哪家好镇江网站排名优化哪家好唐山百度爱采购咸宁网站建设设计多少钱怒江网站推广工具多少钱大浪推广网站公司运城营销网站价格黔南建网站报价南宁网站建设价格绵阳网站优化排名哪家好白山外贸网站建设报价新余英文网站建设哪家好呼和浩特外贸网站建设价格崇左至尊标王价格宜昌百搜标王哪家好阳泉至尊标王哪家好阿坝网站优化按天收费公司保定关键词排名包年推广石家庄网站搜索优化哪家好陇南营销型网站建设湘潭网站制作平湖百度竞价公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化