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();

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,801评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,649评论 18 139
  • 原文地址:http://www.cnblogs.com/powertoolsteam/p/MVC_knowledg...
    寒剑飘零阅读 8,618评论 5 170
  • “真的很抱歉,我现在只想专注于学习,不想谈恋爱。”站在周峰生面前的被表白的女生说道,说完她就一溜儿烟跑掉了,只剩...
    世界上唯一的花阅读 312评论 0 0
  • 一个想圆梦的人,这个名字想了很久,虽然有点长。本意是一个掉进大染坊人,有一天翻然悔悟觉着这样的一生会有些荒唐,得...
    一个想圆梦的人阅读 227评论 0 1