当前位置: 首页 > news >正文

ASP.NET MVC5----基本用法

由于之前在项目中也使用MVC进行开发,但是具体是那个版本就不是很清楚了,但是我觉得大体的思想是相同的,只是版本高的在版本低的基础上增加了一些更加方便操作的东西。下面是我学习ASP.NET MVC5高级编程(5)的一些知识笔记,有些简单的操作没有进行记录,一些知识点就使用思维导图来写出大体的知识架构。


Andyahui

MVC5是完全Bin部署的,也就是说我们最后发布的时候只是将Bin文件下面的应用程序的程序集发布就可以,对于服务器来说只需要有.NET 4.5就可以进行安装了。

一条至理名言“约定优于配置”

这是在使用MVC时经常听到的话,之前不懂是什么意思,现在随着编码次数的增多,对于这句话也有了自己的理解,大体的意思就是说按照人家的之前的约定,不要随意调整项目中的目录,结构。也对现在整个MVC项目的架构都搭建好了,如果说需要调整那么可能是一个大的工程,我们需要对整个底层使用到的相关地方都需要做更改。现在的整个结构有一个理念是“使应用程序的关注点分离,让开发人员更加方便的开发。”

MVC提供的是方法调用的结果,不是动态生成页面(脚本)。

在Web中使用MVC时,应用MVC模式要求Web应用程序中的每一个用户输入只采用请求的方式,在实际的开发中,每个请求都被路由到控制器的一个方法上进行操作,该控制器全权负责解释这些请求,有可能会操作模型,然后选择一个视图反馈给用户。

MVC5中控制器和视图之间值得传递

关于值的传递我们知道有ViewBag,ViewData,ViewDataDictionary,模型(强类型)等形式进行传递,
其实值都是通过ViewDataDictionary来传递的,数据从控制器传送到视图是通过一个名为ViewData的ViewDataDictionary(一个字典类),还有就是ViewBag是ViewData的动态封装器;
动态值不能作为一个参数传递给扩展方法,因为C#编译器为了选择正确的扩展方法,在编译时必须知道每个参数的真正类型。
使用强类型模型对象,必须使所有的数据都是强类型数据,以便在视图中可以使用智能感知。
若是一般的类,在视图中需要使用IEnumerable<>来指定,

    @model IEnumerable<RegisterExternalLoginModel>

要是控制器传递过来的数据本身就是IEnumerable或者其继承它的类型,那么就只需要写

     @model RegisterExternalLoginModel

就可以出现了。
至于说ViewData[“”]和ViewBag.;使用方法简单,但是建议大家少使用, 尤其是在一些大的项目里面,我们完全可以将数据封装到模型中,这样通过模型在控制器和视图之间进行数据的传递。

@Razor视图中的重要知识点

  • :通过”@”来在视图中写C#代码,同时编译器也会将其看待为后台语言进行编译,运行。
  • :可以通过( )来区分一些常见的二义性。
  • :@@两个转义为一个@符号;
  • :可以使用@{ }来区分代码块;
  • :@Html.Raw():按照HTML格式来进行编码输出;
  • :@Html.RenderPartial(“Indx”);此区域放置局部视图,不经过控制器,可以往其传递model,这样局部视图中的model就是我们传递的;还有就是局部视图不能指定布局。只能说像之前的那样嵌套进去。
  • :@Hmtl.RenderAction();这个和上面是有区别的,是需要经过控制器处理的;
  • :@ 注释@,此视图中的注释写法;
  • :调用泛型方法<>需要注意,可以使用@()来区分。
  • :@Html.RenderBody(),这个是在布局中定义的,最后是在此处嵌套网页。
  • :@Html.RenderSection(“Footer”);设置其下面的节,可以在其网页中显示出来这个节。
  • :@Html.DisplayFor();视图的输出采用HTML辅助方法。
  • :@Html.DropDownList();下拉列表.这里设置的是selectList();
          <div id="body">
              @RenderSection("featured", required: false)
              <section class="content-wrapper main-content clear-fix"> @RenderBody() </section> </div>

@section featured {
    <section class="featured">
        <div class="content-wrapper"> <hgroup class="title"> <h1>@ViewBag.Title.</h1> <h2>@ViewBag.Message</h2> </hgroup> <p> To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>. The page features <mark>videos, tutorials, and samples</mark> to help you get the most from ASP.NET MVC. If you have any questions about ASP.NET MVC visit <a href="http://forums.asp.net/1146.aspx/1?MVC" title="ASP.NET MVC Forum">our forums</a>. </p> </div> </section> }

这个自己定义的节点,取代我们在布局视图中的@Html.RenderSection();@section语法为布局中定义的一个节点指定了内容。如果想展示HTML标签,就返回一个System.Web.IHtmlString对象的实例。

对于复杂的应用程序,我们想探讨不同的架构和设计模式来满足我们的需求,领域驱动设计(DDD)是一种团队使用的方法,可用来处理复杂的应用程序,命令查询职责分离(CQRS)也是一种团队开发模式,它在复杂的应用程序开发中占据主要的份额。

  • 查询数据时Include()的介绍

      public ActionResult Edites()
      {
          var albums = db.albums.Include(a => a.Article).Include(a=>a.Genre); return View(albums.ToList()); }

    就比如说是上面的那样,这个Include,从数据库取出的数据采用的是预加载策略,这个就是说尽其所能地使用查询语句加载所有数据。还有一种是延迟加载,这个EF在Linq查询中只加载主要对象数据,而不是去填充我们的设置的对象。这个由一个弊端,就是每次需要多加载一个,这个就是说我们在声明类对象的时候需要前面添加Virtual标记,

    这里的Include方法可以看成减少在构建完整模型中需要的查询数据的一个优化。

    模型绑定

    之前只是知道在形参中传递模型(类),我们不需要管数据是如何过来的,底层的架构已经帮我们封装好了,但是现在看书才发现之前了解的都有皮毛,没有一点知识点。这个在验证模型绑定之前有一个模型的验证,ModelState.IsValid()通过这个来完成服务端的验证,这个之前还有一个通过模型绑定器的东西。

    ([Bind(Include=”类中的属性”,)]); UpdataModel(); TryUpdateModel();

    这两个也是模型绑定验证的,在前面。第二个返回一个布尔类型的值。



文/Andyahui(简书作者)
原文链接:http://www.jianshu.com/p/3323bde5363c
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

相关文章:

  • 网络分析的发展
  • Web前端MVC框架
  • jquery笔记之属性选择器 查找以某种条件开头的页面元素
  • 分享:微软提供的一个开源控件treeview 的一小个用法
  • com.panie 项目开发随笔(NoF)_环境搭建(2016.12.29)
  • 鲁棒的数据库持久层设计
  • java 线程 障碍器
  • 利用WSS做后台存储--设计一个统一的信息发布平台
  • Java foreach操作(遍历)数组
  • lduan server 2012 远程桌面网络高可用(二十三)
  • ASP.NET Theme/aspnet_regiis -ga/aspnet_regsql
  • easyUI中onLoadSuccess方法获取多个对象
  • signalr推送消息
  • 老鼠Atlas之旅(八):Hands-On Lab 4第四个实验,Atlas服务器控件自动完成
  • 使用hashids库混淆在url中与数据库相关的数字
  • JS 中的深拷贝与浅拷贝
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【附node操作实例】redis简明入门系列—字符串类型
  • css系列之关于字体的事
  • django开发-定时任务的使用
  • dva中组件的懒加载
  • ES6--对象的扩展
  • fetch 从初识到应用
  • javascript数组去重/查找/插入/删除
  • Java基本数据类型之Number
  • js 实现textarea输入字数提示
  • Linux链接文件
  • PAT A1050
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • 测试开发系类之接口自动化测试
  • 简单实现一个textarea自适应高度
  • 聚类分析——Kmeans
  • 看域名解析域名安全对SEO的影响
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 首页查询功能的一次实现过程
  • 小而合理的前端理论:rscss和rsjs
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 正则与JS中的正则
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #微信小程序(布局、渲染层基础知识)
  • (09)Hive——CTE 公共表达式
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (HAL库版)freeRTOS移植STMF103
  • (LeetCode) T14. Longest Common Prefix
  • (八)Flask之app.route装饰器函数的参数
  • (多级缓存)多级缓存
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十)c52学习之旅-定时器实验