01.使用MVC自带的DataAnnotations实现数据验证

public class ExternalLoginConfirmationViewModel
{
[Required]
[Display(Name = "Email")]
public string Email { get; set; }
}

自定义数据验证功能(用法及定义):

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web; namespace MVC5.Models
{
public class Employee
{
[Key]
public int EmployeeId { get; set; } [FirstNameValidation]
public string FirstName { get; set; }
[StringLength(,ErrorMessage="Last name length should not more than 5!")]
public string LastName { get; set; }
public int Salary { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web; namespace MVC5.Models
{
public class FirstNameValidation:ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null)
{
return new ValidationResult("Please input FirstName");
}
else
{
if (value.ToString().Contains("@"))
{
return new ValidationResult("The first name should not contains @!");
}
}
return ValidationResult.Success;
}
}
}

02.Model Binder

在.NET的核心MVC中,Model Binder用于映射从HTTP请求到Action方法的参数,可以参考链接

创建自定义 Model Binder ,代替默认的Model Binder.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace MVC5.Models
{
public class MyEmployeeModelBinder:DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext,ModelBindingContext bingingContext,Type modelType)
{
Employee emp = new Employee();
emp.FirstName = controllerContext.RequestContext.HttpContext.Request["FName"].ToString();
emp.LastName = controllerContext.RequestContext.HttpContext.Request["LName"].ToString();
emp.Salary = int.Parse(controllerContext.RequestContext.HttpContext.Request["Salary"].ToString());
return emp;
}
}
}

03. Action的特性:

[NonAction]表示将该Action作为方法使用;

[ChildActionOnly]表示它只能在前台View中通过Html.Action或Html.RenderAction来使用,不能通过在地址栏输入地址直接访问;

[ActionName]表示为某个Action重新指定一个新的名字来使用,如下所示,必须使用新名称来进行调用,即:@Url.Action("GetActionNameByNewName", "Patient")'。

/// <summary>
/// Testing for ActionName
/// </summary>
/// <returns></returns>
[ActionName("GetActionNameByNewName")]
public ActionResult GetActionNameByOldName()
{
return xxx;
}

04. Razor代码带花括号和没有花括号的区别:

@符号后没有花括号只是简单的显示变量或表达式的值,如:

  <li><a href=@Menu.URL>@Menu.DisplayName</a></li>;

@符号后有花括号则表明是对服务器代码的执行,如:

  @{

         var ParentMenu = Model.Where(x => x.ParentId == 0);

     }

05. 认证属性:[Authorize]

为了确保每个Action方法在执行前都通过当前系统的登录验证,则需要在每个要验证Action的方法前加上[Authorize];

06. FormsAuthentication.SetAuthCookie(string userName,bool createPersistentCookie)

作用:将当前已通过验证的用户的登录名加密后放入Cookie中;

参数分析:

userName :The name of an authenticated user. This does not have to map to a Windows account.

译:已通过验证的用户的登录名,和Windows账户没有强制的对应关系;

createPersistentCookie :true to create a persistent cookie (one that is saved across browser sessions); otherwise, false.

译:是否要对Cookie进行永久保存?

07. MVC过滤器:

可以参考一下对过滤器的详细介绍:示例

08. @model与@Model的区别:

09. Partial定义方法并调用

<ul class="dropdown-menu">
@GenerateMenuList(item.Id)
</ul> @helper GenerateMenuList(int id)
{
var subMenu = Model.RoleFunction.Where(x => x.ParentId == id).OrderBy(x => x.Ordering);
foreach (NCGH.UI.Common.ViewModels.RoleFunctionViewModel item in subMenu)
{
var subChildCount = Model.RoleFunction.Where(x => x.ParentId == item.Id).Count();
if (subChildCount == )
{
<li>@Html.ActionLink(item.DisplayName, "List", item.URL, IsAreaProject ? null : new { area = item.ParentId }, null)</li>
} if (subChildCount > )
{
<li class="dropdown-submenu">
<a tabindex="-1" href="#">@item.DisplayName</a>
<ul class="dropdown-menu">
@GenerateMenuList(item.Id)
</ul>
</li>
}
}
}

10. 常见接口:

HttpContext:获取客户端向服务端请求的相关信息,对Request/Response/Server/Session等进行了封装;

总结: A. ViewBag实质还是在内部调用ViewData;

B. ViewModel是用于Model与View之间进行数据传递的;

     C.  RouteTable:存储URL;

												

MVC 5学习总结笔记1的更多相关文章

  1. ASP.NET Core MVC 网站学习笔记

    ASP.NET Core MVC 网站学习笔记 魏刘宏 2020 年 2 月 17 日 最近因为” 新冠” 疫情在家办公,学习了 ASP.NET Core MVC 网站的一些知识,记录如下. 一.新建 ...

  2. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  3. ASP.NET MVC 5 学习教程:快速入门

    起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控制器访问模型的数据 生成的代码详解 使用 SQL Se ...

  4. DSP28377S - ADC学习编程笔记

    DSP28377S -  ADC学习编程笔记 彭会锋 2016-08-04  20:19:52 1 ADC类型导致的配置区别 F28377S的ADC类型是Type 4类型,我的理解是不同类型的ADC采 ...

  5. 学习ReactNative笔记整理一___JavaScript基础

    学习ReactNative笔记整理一___JavaScript基础 ★★★笔记时间- 2017-1-9 ★★★ 前言: 现在跨平台是一个趋势,这样可以减少开发和维护的成本.第一次看是看的ReactNa ...

  6. 深度学习word2vec笔记之算法篇

    深度学习word2vec笔记之算法篇 声明:  本文转自推酷中的一篇博文http://www.tuicool.com/articles/fmuyamf,若有错误望海涵 前言 在看word2vec的资料 ...

  7. ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解

    原文 ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解 在教程的这一部分,我们将研究一下自动生成的 Details 和Delete 方法. Details 方法 打开M ...

  8. ASP.NET MVC 5 学习教程:添加验证

    原文 ASP.NET MVC 5 学习教程:添加验证 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控 ...

  9. ASP.NET MVC 5 学习教程:数据迁移之添加字段

    原文 ASP.NET MVC 5 学习教程:数据迁移之添加字段 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符 ...

随机推荐

  1. 给input元素添加float. 去除IE6 下input的空隙

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. java 类与对象

    class XiyoujiRenwu { float height,weight; String head, ear; void speak(String s) { System.out.printl ...

  3. 【python之路10】python实例练习

    #!usr/bin/env python # -*- coding:utf-8 -*- # 一.元素分类 # # 有如下值集合 [11,22,33,44,55,66,77,88,99,90...], ...

  4. mybatis generator Date类型时间丢失

    开篇 本次项目换用了Oracle数据库,讲真,真的不好用,不太喜欢,比较喜欢轻量级的MySQL但是不得不说从Oracle的严谨中学到不少好东西. <resultMap id="Base ...

  5. Android Studio的使用(八)--// TODO代码

    我们都知道Eclipse存在// TODO代码,该段代码在方法中用于标识该方法仍未完成,也可以用于作为该方法的一个快捷键.例如我们可以用于标识onClick()方法,当我们需要查找onClick()方 ...

  6. [转]PHP经验——PHPDoc PHP注释的标准文档

    文档翻译自:http://en.wikipedia.org/wiki/Phpdoc 标记 用途 描述 @abstract   抽象类的变量和方法 @access public, private or ...

  7. win7 系统保留分区 BCDedit

    系统保留分区简介编辑 “系统保留”分区示意图 Windows Vista/7出于安全考虑,在新装Windows Vista/7系统过程中,如果利用光盘的分区工具给硬盘分区时,系统默认的将一部分(100 ...

  8. 关于java.lang.reflect.InvocationTargetException(jar 包缺少或者冲突)的错误

    我在合肥那边运行了的是湖北石首市的项目没有错 可是回武汉之后 运行这个项目 点击这里的时候 就报错java.lang.reflect.InvocationTargetException   不是数据库 ...

  9. zf-关于收费统计没出来监利县的问题

    这个问题一看就知道跟存储过程有关,所以我直接去后台实现类找到了这个的存储过程 存储过程里第一句就是quhua_code  从 select 开始 就是查询出 4个地方的名字 然后在把这查询出的数据给@ ...

  10. POJ 3660 Cow Contest 弗洛伊德

    题意难懂是POJ的标配,这都TM赖本泽马. 题意:有N头牛进行了M场比赛,比赛双方是A - B 且总是A赢(前面的那个数赢),如果说A赢B,B赢C 则可以确定A赢C.问最终多少头牛的排名可以确定. 思 ...