zoukankan      html  css  js  c++  java
  • 无废话MVC入门教程笔记

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

    1,Html.DropDownList

    //服务端写法     
     @{
            //下拉列表的值
            List<SelectListItem> selectList = new List<SelectListItem>();
            selectList.Add(new SelectListItem { Value = "1", Text = "列表项一" });
            selectList.Add(new SelectListItem { Value = "2", Text = "列表项二" });
        }
        @Html.DropDownList("ddlList", (SelectList)new SelectList(selectList.AsEnumerable(), "Value", "Text")) 
    //客户端生成
    <select id="ddlList" name="ddlList"><option value="1">列表项一</option>
    <option value="2">列表项二</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(20, ErrorMessage = "{0}在{2}位至{1}位之间", MinimumLength = 1)]
            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);
            }
        }
    }

    使用方式

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

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

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

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

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

     
  • 相关阅读:
    JZOJ.2117. 【2016-12-30普及组模拟】台风
    团队合作
    长沙游记
    统计
    html....
    OI之路
    三鑫普及组模拟赛
    牛顿迭代法
    台风
    gcd
  • 原文地址:https://www.cnblogs.com/sky2014/p/4269552.html
Copyright © 2011-2022 走看看