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();
原文地址:https://www.cnblogs.com/pangzhixing/p/6079192.html