• 【.NET-MVC】ASP.NET MVC学习笔记-概述


    第 1 篇:理解控制器和视图

    MVC概述

    • MVC理论就是模型、视图、控制器。   (其实也是种思想,为了让前端、程序、数据分开,也是想解耦)
    • MVC请求流程是:访问控制器,控制器来创建模型,模型去数据库获取数据,模型再返回给视图。
    • VS 2013 创建MVC4 Web应用程序,自动生成MVC框架对应的文件夹,分别是Model、View、Controllers
    • MVC不再用服务器控件(TextBox、GridView等),回到HTML时代,不过可以在html里使用UrlHelper和HTMLHelper类。(感觉还不如直接写回HTML代码)
    • MVC不再用事件(Page_Load()),用回HTML的Get、Post方式请求。

    控制器和视图

    • 控制器文件名必须是Controller结尾。建行为(ActionResult),行为是返回数据,和处理用户请求
    • 视图用来显示给用户界面,而视图可以有很多行为,可以把控制器当做一个类,里面可以写行为和绑定视图。(也能直接访问控制器里的public方法,这到底好还是不好?)
    • return View()的原理是创建了ViewResult对象并渲染了界面。
    • 方法返回类型除了ActionResult,还有ContentResult(只返回字符串)等。
    • 在方法头上加上声明[NonAction],就不会作为行为。(还有许多方法声明,例如只能做POST请求的行为等,往下看有。)

    感言

      还是觉得WebAPI更适合分离前后端,而且很适合需要持续更新的项目,只是没有可比,MVC的场景是整个站点,WebAPI的场景是针对接口。

    第一个MVC(其实自己之前写过几次了)

    /Controllers/UserController.cs

        public class UserController : Controller//控制器
        {
            public ActionResult Users()//行为
            {
                return View("User");//视图
            }
    
        }

    /Views/User/Users.cshtml(右键代码的View()方法 - 添加视图,会自动生成)

    @{
        ViewBag.Title = "Users";
    }
    
    <h2>用户信息管理界面</h2>
    第2篇:视图传参、视图里使用Razor语法

    传参的方法

    • 用ViewData[]向页面传递数据,页面可以直接用@ViewData[]来使用。
    • 在return View()里也可以传参,如return View("User",userinfo),但只能传引用类型,不能传值类型。
    • 使用ViewBag.xxx,但不能和ViewData[]的重复,不然会覆盖掉ViewData[]的。(感觉ViewBag就是使用ViewData[]的)

    Razor语法

    • 在页面用@可以使用C#代码,类似aspx里的<%%>那样穿插客户端和服务器代码。(原则上视图一般只用显示结果,不参加逻辑和数据代码)
    • 一般是cshtml页面,aspx和cshtml页面的区别和比较,还是不太清楚

    /Controllers/UserController.cs

        public class UserController : Controller//控制器
        {
            public ActionResult Users()//行为
            {
                var name = "老K";
                ViewData["name1"] = "ViewData名字:"+name;//旧的ViewData传参
                ViewBag.name = "ViewBag名字:"+name;//新的ViewBag,可以随意带属性,不过性能速度比ViewData慢。
                return View("Users",(object)name);//视图
            }
    
        }

    /Views/User/Users.cshtml

    @{
        ViewBag.Title = "Users";
        string name = (ViewData["name1"] != null) ? (string)ViewData["name1"] : "";
        string viewname = (string)Model;
        string bagname = ViewBag.name;
    }
    
    <h2>用户信息管理界面</h2>
    <p>@name</p>
    <p>@viewname</p>
    <p>@bagname</p>
    第3篇:使用EF、使用服务器端验证

    使用EF

    • EF原理,就是Entity Framework(实体框架),是个ORM工具(对象关系映射),优点是方便开发,加快开发速度,缺点是处理复杂逻辑性能不好(也许有些改进方法)。
    • EF有3个方案,数据库自动生成,Model生成,POCO生成。
    • 加上Linq,可以更便捷的开发,所以我也是向MVC + Linq to EF + Jquery组合方向学习(MVC里又有封装Jquery的方法,但我感觉Jquery已经够方便的了。)
    • VS2013没有EF解决方法:我本来也没有,看了网上教的,在C:ProgramDataPackage Cache{08AEF86A-1956-4846-B906-B01350E96E30}v12.0.20912.0packagesEFTools,运行后点Repaire,如果没有,就在Package Cache里搜索EFTools
    • 一些历史:EF2.0支持edmx生成,4.0支持Database First、Model First、Code First三种模式,5.0性能提升。在.NET Framework4.5可以使用EF 5.0.

      步骤1:首先建好数据库表、字段。(这是传统点的方法,EF是可以帮你创建的。)

      步骤2:创建一个文件夹或新的项目,添加新项 - 数据 - ADO.NET实体数据模型,然后有向导配置数据库,拉数据表进去。我的做法:建个edmx文件夹,建立NewsEF.edmx(里面很多配置文件),还有类名也要改成NewsEF。(默认还是是Entities)

      步骤3:然后访问就直接MVC_Web.edmx.NewsEF来调用增、删、改方法,还可以用里面的实体类。(方便吧)

    外篇:其他补充

    -大致原理-

    模型:代表业务和逻辑层,封装了实体的属性和方法。

    视图:负责将模型传递给表示层,具体用HTML、XML等。遵循原则,表示层最好不要用逻辑和业务。

    控制器:控制程序的逻辑,是视图和模型协调的工具,从视图接收信息,然后再传到模型,模型再返回给视图。

    惯例优先原则:.NET帮你生成好3个文件夹。注意一下,在Controller里,cs文件命名都必须Centroller结尾,在Views有Shared(保存共享视图)和其他文件,有点琐碎,但也提高效率

    在App_Start里RouteConfig.cs是配置路由,目前理解是定义域名的规则,默认路径是 控制器名/行为/id。

    控制器

    (在Conteller里带ActionResult的方法),MVC4意思是下一步做什么,而不是怎么做

    返回可以有很多类型:

    View()   返回视图渲染的ViewResult

    Content()  返回文本的ContentResult

    File()  返回文件

     还有Javascript()、Json()、HttpNotFound()、PartialView()...

    控制器的参数(MVC强大功能之一:模型绑定,可以使用请求消息过来的参数)

    传统是URL传参、Session、视图等,但这个只要有失败的解析就运行不下去,或者通过TryParse()来维护。

    模型绑定其实也是与Request一一相应,不过省略了显示代码、方便使用:

    public ActionResult Create(string title,decimal currentPrice,DateTime startTime,DateTime endTime)//这里是模型绑定,或者换成Auction实体类
    {
          var auction = new Auction(
            Title = title,
            CurrentPrice = currentPrice,
            StartTime = startTime,
            EndTime = endTime
        );
    }    

    还有通过return View()返回参数,如var id = "";return View("auction",id);

    Razor语法(在html以@将服务器代码写进去的语法)

    分为:代码段和代码块

    代码段:如@DateTime.Now 或者有@Html.ActionLink("Login")

    代码块:@{

        代码内容

        }

     变量生命周期应该是页面级的,使用起来确实挺方便。

    常用的特性

    [HttpGet] [HttpPost]  只处理Get / 只处理Post传递方式

    [AllowAnonymous][Authorize]调用不用权限验证 / 限制调用

    [Bind(...)]form表单提交时筛选参数用的

    [Remote("","")]放在实体类,可以调用方法去检查

    [HandleError(...)]异常处理,()里可以具体到哪些异常,与web.config的设置配合使用

    传输数据:ViewData[]和ViewBag.xxx

     安全、日志、缓存

    参考:

    http://www.cnblogs.com/powertoolsteam/p/MVC_one.html

    《asp.net mvc4 web编程》

  • 相关阅读:
    闭包总结
    执行上下文总结
    下拉列表
    练习 九九乘法表
    JavaScript中break和continue的区别
    JaveScript遍历数组的方法
    将一个块级元素水平和垂直居中的方法
    ECMAScript 中最常见的一个问题是字符串连接的性能
    JS 一些题目 难点
    JS闭包
  • 原文地址:https://www.cnblogs.com/laokchen/p/5757836.html
Copyright © 2020-2023  润新知