• MVC入门第一天


    一、异步的两种方法

    1.  用jQ的异步  返回content
      1. controllor:return Content(sum.ToString());//这里涉及到一个自动封装的问题
      2. html页:<form id="form1">
                        <input type="text" name="calc1" />+
                        <input type="text" name="calc2" />
                        <input type="button" id="btnAdd" value="加" />
                        <input type="text" name="sum" id="sum" />
                    </form>
      3.  $(function () {
                    $('#btnAdd').click(function () {
                        $.post(
                            '@Url.Action("CalcAdd","Home")',//提交到的地址
                            $('#form1').serialize(),//把表单的数据序列化发送
                            function (msg) {//回调函数,msg是接收到的服务器端发来的数据
                                $('#sum').val(msg);
                            }
                            )
                    })
                })

         2.AjaxHelper类

    1. controller代码
      1. public ActionResult CalcAdd1(int calc1, int calc2)
      2. return Json(temp, JsonRequestBehavior.AllowGet);
    2. html代码
      1.  @using (Ajax.BeginForm("CalcAdd1", "home", new AjaxOptions()
                {
                    OnSuccess = "Success"
                }))
                {
                    <input type="text" name="calc1" />
                    <span>+</span>
                    <input type="text" name="calc2" />
                    <input type="submit" value="=" />
                    <input type="text" id="result" />
                }
    3. 调用的脚本
      1. <script src="~/jquery-1.8.3.min.js"></script>
            <script src="~/jquery.unobtrusive-ajax.min.js"></script>

     二、MVC的常识

    1.控制器(Controller)- 接收用户输入,并完成模型、视图的调用,业务逻辑处理lController 处理用户交互,从model中获取数据并将数据传给指定的view
    2.视图 (View) - 为用户展示结果,View 是用户接口层组件。主要是将Model中的数据展示给用户。ASPX和ASCX文件被用来处理视图的职责    
    3.模型 (Model)- lModel是存储或者是处理数据的组件,具有两个方面的含义:DomainModel,ViewModel
     
    三、路由简介
    1.在Global中注册了路由数据
    2.包括:默认Controller,默认Action,请求地址匹配路由规则
     
    四、Razor视图引擎简介
    1.强大的@:表示使用C#代码,相当于aspx中的<%%>
    2.可以完成输出功能
    3.当遇到html标签时会认为C#代码结束,贪婪匹配后面的内容,如@a1会认为是变量a1,如@a<br>1会认为是变量a
    4.会对标签内容进行Html编码
    5.注释:@*注释内容*@
    6.注意:@变量表示输出,结尾不加分号
    7.引入命名空间:@using 命名空间;
     
     
    五、HtmlHelper
    lHelper:是为了方便View的开发而产生的
    lHtmlHelper的演变
    •普通链接:<a href="/home/index">首页</a>
    •当路由规则改变时,几乎所有的超连接都要更改
    •借助Url根据路由规则生成链接地址:<a href=“@Url.Action(”Index“,”Home“)”>首页</a>
    •缺陷是不能编译时排错,只有运行时才知道是否正确
    •专门用于MVC的链接方式:Html.Action(“Home”,“Index”),会根据路由规则生成a标记并且在运行时可以进行有效性检查,不需要用户点击链接后才知道链接出,错了
    • 标签框:Html.Label(string expression,string text):会生成一个label标记,并显示text内容
    • 文本框:Html.TextBox(“AA”);//会自动取ViewDate中键为AA的值,同时会以“AA”作为生成的HTML控件的id与name属性的值
    • 隐藏域:Html.Hidden(“AA”)//同TextBox
    • 注意:没有提交按钮、按钮的封装
     
    六、表单(BeginForm)
    l表单方式一:using(Html.BeginForm(actionName,controllerName)){…}
    l表单方式二:
    •@Html.BeginForm(actionName,controllerName)
    •…
    •@{Html.EndForm();}
     
    七、强类型视图
        手动创建强类型视图
    •在ViewModel中创建一个类型
    •在Action中为ViewData.Model赋值
    •在View中使用“@model 类型”设置
        根据菜单创建强类型视图
        优点
    •在编译时可以完成代码检验
    •智能提示
     
    八、关于get、post和request
    1.一般继承自Controller类,类Controller继承自ControllerBase,实现了IController接口
    2.Action的本质就是类中的公有方法,可以进行重载,要求参数不同
    3.可以接收客户端的Get或Post请求,如果希望某个方法只处理某一种请求,可以在方法前加特性[HttpGet]或[HttpPost],处理请求时会根据参数进行相应方法的调用
    4.也可以通过路由规则传递数据
     
    接收参数
    •方式一:使用Request根据key接收value
    •方式二:自动装备,在方法的参数位置,定义类型及参数名称,mvc会自动匹配相同名称的属性值,即匹配input的name与对象的属性相同名称的值
    •还可以完成自定义类型参数的封装
    •自动装配的要求:参数的名称或对象类型的属性必须与参数的键相同
     
    九、ActionResult的几种返回
    直接或间接继承自ActionResult的类型
    •ViewResult:使用View()可以指定一个页面,也可以指定传递的模型对象,如果没有指定参数则表示返回与Action同名的页面
    •ContentResult:使用Content(string content)返回一个原始字符串
    •RedirectResult:使用Redirect(string url)将结果转到其它的Action
    •JsonResult:使用Json(object data)将data序列化为json数据并返回,推荐加上JsonRequestBehavior.AllowGet可以处理Get请求,一般结合客户端的ajax请求进行返回
     
    十、关于路由规则
    1.路由规则Route:可以查看源代码了解一下构造方法,需要指定路由格式、默认值、处理器三个值
    2.路由数据RouteData:当前请求上下文匹配路由规则而得到的一个对象,可以在Action中通过RouteData.GetRequestString(“controller/action”)获取本此请求中控制器或行为的真实名称
    3.路由集合RouteCollection:存放路由规则的集合Collection<RouteBase>,一个MVC项目中,可以配置多个路由规则,按照键值对的格式存储到路由集合中
    4.路由表RouteTable:类中包含静态的RouteCollection属性,完成所有路由规则的全局存储,在Global中完成注册
    注意:对于一个网站,为了SEO友好,一个网址的URL层次不要超过三层
    示例:localhost/{频道}/{具体网页},其中域名第一层, 频道第二层, 那么最后的网页就只剩下最后一层了. 如果使用默认实例中的“{controller}/{action}/{id}”的形式会影响网站的SEO,可以使用”/”之外的其它字符进行分隔,如”-”,但这时会进行严格匹配,即必须要有-才可以匹配到,默认值会失效
     
     
    一些参数:
    参数url
    •设置url的路由规则,可变的值使用{}括起来
    •关键字controller、action名称不可变
    参数defaults
    •设置路由规则中参数的默认值
    •类型为object,可以传递一个匿名对象,属性取决于规则中定义的参数
    •参数UrlParameter.Optional表示可选的只读参数
    •如果在实际的url中没有指定路由规则中某些参数,则会使用默认值作为参数的值使用
    参数constraints
    •设置路由规则的约束
    •类型为object,可以传递一个匿名对象,属性取决于规则中定义的参数
    •参数是正则表达式字符串,如controller=“^[a-z]+$”
     
     
    路由调试
    路由规则调试
    •当我们写了多个路由规则之后,如何确定路由规则是否都正确呢?这些路由规则之间是否有重复呢?这就需要使用RouteDebug进行分析
    操作步骤
    •在当前项目中添加程序集RouteDebug的引用
    •在Global文件的Application_Start方法中,在完成路由规则注册的后面,进行调试注册:RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
    •如果不想进行路由调试,只需要将这句代码删除或注释即可
     
     
    路由的总结:
    总结
    •路由规则可以注册多条
    •路由规则的名称不能重复
    •路由规则有顺序,并且按照顺序进行匹配;建议子频道的路由规则配置在前面
    •路由规则可以设置约束
    •路由规则匹配的控制器可以设置命名空间约束
     
     
    十一、校验
    在Model中创建类型,用于在View中作为强类型页面的类型
    NET 框架中System.ComponentModel.DataAnnotations命名空间包括了众多可用的内置验证特性,用于修饰属性,常用的四个如下:
    •[Required]
    •[StringLength]
    •[Range]
    •[RegularExpression]
    •属性ErrorMessage:指定错误提示信息
     
     
    在View的页面中,首先指定页面强类型@model 类型
    使用Html.***For(model=>model.Property)生成表单,这些表单元素中就会包含校验规则属性
    引用jquery、jquery校验、jquery隐式校验3个组件
    通过Html.EnableClientValidation(true);控制客户端验证的启用与禁用(mvc3中自动开启)
    使用Html.ValidationMessageFor(…)显示校验信息,也可以使用Html.ValidationSummary()统一显示
    点击提交按钮转到后台Action,使用ModelState.IsValid判断前台验证是否成功,如果返回true表示验证成功
     
     
    十二、Area
    在项目上右击-》添加-》Area,填写名称后确定,会在这个项目上建一组文件夹出来,就像是一个子项目
    修改此文件夹下的***AreaRegistration代码,可以在这个文件中进行路由注册
    在Global中进行区域路由注册:AreaRegistration.RegisterAllAreas();
  • 相关阅读:
    websocket 心跳及重连
    Liunx下 tomcat自动重启脚本,亲测。
    Node.js 安装配置---菜鸟教程,贼好用
    Linux下安装Perl依赖
    Centos 8 虚拟机访问外网
    以后园子可能用的就比较少了qwq
    酒店之王
    git bash here创建项目时无法使用上下箭头
    Win10搭建IIS实现局域网访问网站
    js判断两个对象是否相同的三种方式
  • 原文地址:https://www.cnblogs.com/pangzhixing/p/6079192.html
Copyright © 2020-2023  润新知