自学mvc,看了园子里李林峰写的李林峰写的无废话MVC入门教程笔记,现在有的平时忽略的或是不太清楚的点记下来

1,Html.DropDownList

//服务端写法
@{
//下拉列表的值
List<SelectListItem> selectList = new List<SelectListItem>();
selectList.Add(new SelectListItem { Value = "", Text = "列表项一" });
selectList.Add(new SelectListItem { Value = "", Text = "列表项二" });
}
@Html.DropDownList("ddlList", (SelectList)new SelectList(selectList.AsEnumerable(), "Value", "Text"))
//客户端生成
<select id="ddlList" name="ddlList"><option value="">列表项一</option>
<option value="">列表项二</option>
</select>

2,母版页

a,页面主内容是由@RenderBody()来标识

b,@ViewBag.Title 即是一个标题的占位符,在Control里或页面中给该标题的变量赋值。

c,母版页@RenderSection("MasterPart", false) ,@RenderSection方法接受两个参数:("名称","是否是必须的"),如果是必须的那么子页面必须实现该方法,否则会报错。@section MasterPart{这里是母板页的第二部分},@section+空格+名称{内容}来实现母板页内容的替换。

d,Create as a patial view创建自定义内容,@Html.Partial("~/Views/Shared/_UserControl.cshtml")

e,当我们的页面未指定Layout的时候,如果项目在全局或在同文件夹内存在_ViewStart.cshtml时该页面的Layout会自动继承自_ViewStart.cshtml,如果不同的文件夹层级都存在_ViewStart.cshtml,则继承离该页面最近的一个。_ViewStart.cshtml是一个特殊的文件。

f,如果不想页面使用任何母板页和布局页,则需要设置Layout = null

3,RaddioButton

性别: 男 @Html.RadioButtonFor(user => user.Sex, 0, new { @name = "sex", @checked = "true" })

   女 @Html.RadioButtonFor(user => user.Sex, 1, new { @name = "sex" })


4,数据验证
a,
        [Display(Name = "特殊数字")]
[Required(ErrorMessage = "请输入{0}")]
[StringLength(, ErrorMessage = "{0}在{2}位至{1}位之间", MinimumLength = )]
public string InputNumber { get; set; }

[Display(Name = "特殊数字")]:视图如显示的名称,具体看运行效果。

[Required(ErrorMessage = "请输入{0}")]:InputNumber是必须填写的,如果不填写ErrorMessage属性的值将以显示在页面上。{0}为Display中Name属性的占位符。

[StringLength(20, ErrorMessage = "{0}在{2}位至{1}位之间", MinimumLength = 1)]:字符串长度为:1-20之间。{0}、{1}、{2}分别为参数的占位符。{0}Name,{1}1{2}20

b,[RegularExpression(@"^[0-5]*$", ErrorMessage = "只能输入0-5间的数字")]:第一个参数为要验证的正责表达式,第二个参数为错误消息。

c,继承方式实现共用数据校验,用一个类去继承RegularExpressionAttribute,从而达到封装正责表达式和错误消息作用,类代码如下:

using System;
using System.ComponentModel.DataAnnotations; namespace MVC3.Demo.App_Code
{
public class SpecialValidation : RegularExpressionAttribute
{
public SpecialValidation() : base(@"^[0-5]*$") { } public override string FormatErrorMessage(string name)
{
return String.Format("{0}在0-5之间", name);
}
}
}

使用代码如下

using System.ComponentModel.DataAnnotations;
using MVC3.Demo.App_Code; namespace MVC3.Demo.Models
{
public class ValidationModel
{
[SpecialValidation]
public string InputNumber { get; set; }
}
}

5,富客户端用extjs和juqeryui

6,在MVC中使用AOP

a,创建属性类继承ActionFilterAttribute

using System.Web.Mvc;

namespace MVC3.Demo.App_Code
{
public class LogActionFilter : ActionFilterAttribute
{
public string LogMessage { get; set; } public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Response.Write(@"在Action执行之前执行" + LogMessage + "<br />");
base.OnActionExecuting(filterContext);
} public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Write(@"在Action执行之后执行" + LogMessage + "<br />");
base.OnActionExecuted(filterContext);
} public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Write(@"在Result执行之前执行" + LogMessage + "<br />");
base.OnResultExecuting(filterContext);
} public override void OnResultExecuted(ResultExecutedContext filterContext)
{
filterContext.HttpContext.Response.Write(@"在Result执行之后执行" + LogMessage + "<br />");
base.OnResultExecuted(filterContext);
}
}
}

使用方式

         [LogActionFilter(LogMessage = "日志写入:Validation方法")]
public ActionResult Validation()
{
return View();
}

7,关于分页,我看园子里力推杨涛的WebPager,方法很多,试用了一种最简单的,还是很好用的,mark一下

using Webdiyer.WebControls.Mvc;
//控制器和view都添加这个引用,当然还有webconfig但是配置了没用不知道为什么
//控制器代码
return View(foodList.OrderByDescending(a => a.MyFood.BuyDate).ToPagedList(id, ));
//View代码
@Html.Pager(Model,new PagerOptions{PageIndexParameterName = "id",ShowPageIndexBox = true,PageIndexBoxType = PageIndexBoxType.DropDownList,ShowGoButton = false})
@section Scripts{@{Html.RegisterMvcPagerScriptResource();}}

MvcPager主页地址:http://www.webdiyer.com/

里面有多种实现方式,有需要的自己看看,实现一下,相信很容易。

 

无废话MVC入门教程笔记的更多相关文章

  1. 无废话MVC入门教程二[第一个小Demo]

    mvc技术交流,欢迎加群: 本文目标 1.了解"模型"."视图"."控制器"的创建.调试和使用过程. 本文目录 1.创建模型 2.创建视图 ...

  2. 无废话MVC入门教程一[概述、环境安装、创建项目]

    (转载) 本文目标 1.对MVC有初步的了解 2.能够在VS2010的基础之上安装MVC3的开发和运行环境 3.对MVC框架有概括性的认识 本文目录 1.什么是MVC 2.VS2010安装MVC3 3 ...

  3. WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]

    WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...

  4. 无废话ExtJs 入门教程二十一[继承:Extend]

    无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...

  5. 无废话ExtJs 入门教程二十[数据交互:AJAX]

    无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...

  6. 无废话ExtJs 入门教程十九[API的使用]

    无废话ExtJs 入门教程十九[API的使用] extjs技术交流,欢迎加群(201926085) 首先解释什么是 API 来自百度百科的官方解释:API(Application Programmin ...

  7. 无废话ExtJs 入门教程十七[列表:GridPanel]

    无废话ExtJs 入门教程十七[列表:GridPanel] extjs技术交流,欢迎加群(201926085) 在Extjs中,GridPanel用于数据显示,即我们平时说的列表页.在本节中,我们先对 ...

  8. 无废话WCF入门教程六[一个简单的Demo]

    一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...

  9. 无废话ExtJs 入门教程十六[页面布局:Layout]

    无废话ExtJs 入门教程十六[页面布局:Layout] extjs技术交流,欢迎加群(201926085) 首先解释什么是布局: 来自百度词典的官方解释:◎ 布局 bùjú: [distributi ...

随机推荐

  1. 基于JQ的简单左右轮播图

    // 轮播图 主要实现思想: a.第一层div,设置overflow为hidden. b.里面是一个ul,每个li里面有个img或者为每个li设置背景图片也可以. c.li设置为左浮动,排成一行,还有 ...

  2. OTL调用Oracle存储过程

    OTL很早前用过,今天写东西要调存储过程,程序写完了,调试死活通不过,折腾了一早晨. 最后才发现错误,这里总结一下: 1.代码写的不规范. 有个参数后边少写了个“,”以至于总是抱错.而单独写的测试例子 ...

  3. What makes an inferred latch? how To avoid creating inferred latches? when do you know you need latches?

    What makes an inferred latch?For combinatorial logic, the output of the circuit is a function of inp ...

  4. 在Azure上通过Powershell创建多Interface的Cisco CSR路由器

    前面通过Json的Template在Azure上创建了Cisco的CSR路由器.但那个Json的template只支持1块网卡.如果需要多网卡的Cisco CSR路由器,可以改上篇文章中提到的Json ...

  5. ORA-12514: TNS: no listener 解决方案

    服务端:oracle 11g 客户端: pl/sql 问题描述: 用客户端 pl/sql 连接登录的时候,提示 "ORA-12514: TNS: no listener". 在服务 ...

  6. Boost.Asio基本原理(CSDN也有Markdown了,好开森)

    Boost.Asio基本原理 这一章涵盖了使用Boost.Asio时必须知道的一些事情.我们也将深入研究比同步编程更复杂.更有乐趣的异步编程. 网络API 这一部分包含了当使用Boost.Asio编写 ...

  7. 侯捷STL学习(八)-- 深度探索deque

    layout: post title: 侯捷STL学习(八) date: 2017-07-19 tag: 侯捷STL --- 第十八节 深度探索deque上 duque内存结构 分段连续,用户看起来是 ...

  8. 10-14C#基础--语句(switch....case和for...循环)

    10-14C#基础--语句(2) 一.课前作业:“跟电脑猜拳” 二.switch(定义的变量,参数值)......case.... 注:switch...case大多用于值类型的判断,这里不同于if表 ...

  9. Android CTS(frome google)

    Compatibility Test Suite How does the CTS work? The Compatibility Test Suite (CTS) is a free, commer ...

  10. spl_autoload_register()和__autoload()2

    这也是OO设计的基本思想之一.在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可.下面是一个实际的例子:   class ClassA{ public f ...