ASP.NET MVC 开发模式(下)基础完结篇

模型的绑定与验证

通过模型绑定获取表单数据

模型绑定
将浏览器发送的HTTP请求数据转换为.NET对象的过程
模型绑定使我们在控制器中可以直接获取视图,或URL传递过来的数据,并且这些数据可以自动转换为模型对象,以便调用

  • 获取绑定的值:
    (1)Request.Form:获取表单提交的值;
    (2)RouteData.Values:获取路由的值;
    (3)Request.QueryString:获取URL的值;
    (4)Request.Files:获取上传文件。

  • 修改后的控制器包含两个版本的Index操作方法,无参数的Index方法支持浏览(HTTP GET),带参数的Index方法支持提交(HTTP POST),所以加上[HttpPost]标注。

  • 默认的模型绑定需要遵守相关约定。在视图中,表单标签的name属性和模型对象属性的名称必须相同,否则无法完成绑定

通过绑定基本类型获取表单数据

public class HomeController : Controller
{
    [HttpPost]
    public ActionResult index(string gname, int? gid)
    {
        ViewBag.Info =  "您输入的商品编号是:" +gid + ",名称是:" + gname;
        return View();
    }
}

Index(string gname, int? gid)方法的参数声明中,gid参数需要设定为int?类型,这种类型称为“可空 int类型”,表示即可以是int类型,也可以是null类型。

对模型数据进行验证

  • 数据注解
    • ASP.NET MVC 框架提供了数据验证的 API,称为 “模型数据注解” 或 “模型元数据”
    • 数据验证API位于 System.ComponentModel.DataAnnotations 名称空间
数据验证API示例说明
Compare[Compare(“MyOtherProperty”)]两个属性值必须相同
Range[Range(10, 20)]属性值必须在指定的数值范围内
RegularExpression[RegularExpression(“pattern”)]属性值必须匹配正则表达式
Required[Required]属性值必须非空或者不能只是空格
StringLength[StringLength(10)]属性值长度不能超过给定的最大长度

模型验证(下例)

public class Movie
{
    // 影片名称
    [Required] // 不允许属性值为空
    public string Title { get; set; }
    // 上映日期
    [DataType(DataType.Date)] // 指定属性值为日期格式
    public DateTime ReleaseDate { get; set; }
    // 光盘售价
    [Range(1, 100)] // 属性值在1~100范围
    [DataType(DataType.Currency)] // 指定属性值为货币
    public decimal Price { get; set; }
    // 评分
    [StringLength(10)] // 属性值的最大长度为10
    public string Rating { get; set; }
}

通过EF框架实现删除和修改

通过EF框架删除数据

// 示例代码
using (DBTESTEntities db = new DBTESTEntities())
{
    var del = db.TableName.Find(ID);
    //	根据ID删除表中数据
    db.TableName.Remove(del);
    // 提交更新
    db.SaveChanges();
}

通过EF框架修改数据

// 示例代码
using (DBTESTEntities db = new DBTESTEntities())
{
    var Update = db.TableName.Find(ID);
    // 根据ID修改表中数据
 	Update.LineName = 8000;
    // 提交更新
    db.SaveChanges();
}

实现登录及MVC Filter的应用

  • Filter(过滤器)
    • 通常控制器的操作方法在执行前后,需要处理运行过程中所产生的状况,为了满足此要求,ASP.NET MVC提供过滤器来处理
    • 支持的过滤器类型有四种,分别是:Authorization(授权),Action(行为),Result(结果)和 Exception(异常)
Filter Type实现接口执行时间Default Implementation
Authorize FilterAuthorizeFilter在所有Filter和Action执行之前执行AuthorizeAttribute
Action FilterActionFilter分别在Action执行之前和之后执行ActionFilterAttribute
Result FilterResultFilter分别在Action Result 执行之后和之前执行ResultFilterAttribute
Exception FilterExceptionFilter只有在filter或者action method或者action result抛出一个异常时侯执行HandleErrorAttribute

AuthorizeFilter筛选器

  • AuthorizeFilter
    • 授权过滤器是最先运行的过滤器,可以用于对操作方法在正式运行前做一些额外的判断,例如,登录验证,授权检查、是否为SSL完全链接、验证输入信息是否包含攻击字符串等。

ActionFilter过滤器

  • ActionFilter
    • ActionFilter与AuthorizeFilter类似,只是执行时间不同。
    • ActionFilter过滤器是在Action方法执行前后会触发,主要用于在Action执行前后处理一些相应的逻辑。

ResultFilter过滤器

  • ResultFilter
    • ResultFilter过滤器的使用和ActionFilter, AuthorizeFilter过滤器使用方式类似,只是执行时间不同。
    • ResultFilter分别在Action Result执行之前和之后分别执行,即在展示结果之前和之后分别执行。

ExceptionFilter过滤器

  • ExceptionFilter
    • 只有在filter,或者 action method, 或者 action result 抛出一个异常时候执行。

布局页和分部视图

母版视图的基本使用( @RenderBody )

  • 母版页

    • 在ASP.NET MVC应用程序中,依然沿用了母版页技术
    • 在ASP.NET MVC,可以使用 “布局页”、“页面片段”、“分部视图”等视图技术,组织站点视图页面的版面结构,实现应用程序一致的外观与界面
  • _ViewStart.cshtml

    • 该文件默认位置:/Views/_ViewStart.cshtml
    • _ViewStart.cshtml的特点是“预加载”
  • _Layout.cshtml

    • 该文件默认位置:/Views/Shared/_Layout.cshtml
    • _Layout.cshtml通常称为“布局页”、“母版视图”、“模板页”
  • _Layout.cshtml有两段特别的Razor声明

    • RenderBody:“body占位符”的作用。子视图页面的所有内容默认填入到_Layout.cshtml的@RenderBody所在位置
    • RenderSection:作用是“块占位符”。将子页面中定义的代码块填入到_Layout.cshtml的@ RenderSection所在位置

注意
1.@RenderBody呈现的页面内容只能显示在标签对之间。该方法不需要参数,而且只能在视图页面中出现一次。
2.修改_Layout.cshtml的名称或删除该文件后,会发生异常:“未能在以下路径中找到布局页“。此时需要在视图代码的第一行输入新的模板页面地址,以代替默认的_Layout.cshtml

母版中的页面片段(@RenderSection)

  • RenderSection
    • RenderBody在_Layout.cshtml中只能使用一次
    • 有更多的子视图内容填入到_Layout.cshtml,需使用RenderSection,即“页面片段”技术

注意
如果新建的子视图没有定义“页面片段”,则会抛出异常。可以使用 @RenderSection(“foot”, false) 引用“页面片段”,参数false代表“foot页面片段”不是必须的,子视图页面不用强制定义

分部视图

  • 分部视图

    • 用户控件技术在ASP.NET MVC称为分部视图
    • 创建分部视图,分为以下三个步骤:
      • 右键点击/Views/Shared目录,选择“添加”-“视图”;
      • 设定“视图名称”为“_top”,并选中“创建为分部视图”;
      • 在新建的_top.cshtml中输入页面内容。
  • 引入分布视图,有如下几种方式:

    • @Html. Partial()与@Html.RenderPartial()
    • @Html.Action()与@Html.RenderAction()
  • 分部视图

    • @Html. Partial()与@Html.RenderPartial()直接将分部视图嵌入到界面上,不需要单独的Controller中的方法,分部视图可以共享主视图中控制器返回的数据。
    • @Html.Action()与@Html.RenderAction()则通过分部视图单独的Controller中的方法来将分部视图嵌入到页面上。
    • @Html. Partial()与@Html.Action()返回字符串。
    • @Html.RenderPartial()与@Html.RenderAction()直接输出至当前HttpContext。

注意
分部视图文件放置于 /Views/Shared目录下,任何视图都可以通过@Html.Partial方法载入使用

在MVC中使用AJAX

AJAX辅助方法

  • Ajax辅助方法

    • 同样可以用于创建表单和指向控制器操作方法的链接,但不同的是,它们与服务器采用的是Ajax(异步交互)方式
    • 当使用Ajax辅助方法时,无须编写任何脚本代码即可实现程序的异步性。
  • 脚本

    • 使用Ajax辅助方法必须先引入jQuery.unobtrusive-ajax.js
    • 此文件默认包含在ASP.NET MVC应用程序模板中。
  • nAjax辅助方法通过“@Ajax”调用

    • 如“@Ajax.ActionLink”、“@Ajax.BeginForm”
  • Ajax.ActionLink方法

    • 可以创建一个具有异步行为的超链接。
    • ActionLink方法的第一个参数是超链接的文本,第二个参数是操作方法的名称。
    • ActionLink方法可以通过设置AjaxOptions对象的属性值来调整Ajax请求的行为

AjaxOptions对象能够配置对服务器的异步请求以及处理返回的数据

属性作用
Confirm获取或设置提交请求之前,显示于确认窗口中的消息。
HttpMethod获取或设置 HTTP 请求方法(“GET”或“POST”)。
InsertionMode获取或设置指定如何将响应结果插入到目标 DOM 元素的模式。
LoadingElementId获取或设置加载时要显示的 HTML 元素的 id 属性值。
OnBegin获取或设置更新页面之前调用的 JavaScript 函数的名称。
OnComplete获取或设置数据响应之后,更新页面之前,调用的 JavaScript 函数。
OnFailure获取或设置页面更新失败时调用的 JavaScript 函数。
OnSuccess获取或设置页面更新成功之后调用的 JavaScript 函数。
UpdateTargetId获取或设置要使用服务器响应来更新的 DOM 元素的 ID。
Url获取或设置要向其发送请求的 URL。

Ajax.BeginForm

  • 使用的Ajax.BeginForm方法创建的是异步表单

MVC中应用 jQuery Ajax

  • 当使用Visual Studio创建ASP.NET MVC应用程序时,会默认生成Scripts目录,其中包含了jQuery需要的所有库文件
    • jQuery核心库是名为jQuery-1.7.1.js的文件
    • 两个jQuery插件:jQuery UI和jQuery Validate(验证)
    • 包含“unobtrusive”字样的文件是由Microsoft编写的非侵入式脚本文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑夜中的潜行者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值