zoukankan      html  css  js  c++  java
  • MVC工作中的笔记~2(架构师是一步一步练成的)

    11 重写类的ToString()方法的作用:
    protected void Page_Load(object sender, EventArgs e)
        {
            info infos = new info("zzl", "male", 27);
           Response.Write(infos.ToString());
        }
       
    
    class info
    {
        public string Name { get; set; }
        public string Gander { get; set; }
        public int Age { get; set; }
        public info(string name,string gander,int age)
        {
            Name = name;
            Gander = gander;
            Age = age;
        }
    
        public override string ToString() //本类中的ToString()方法进行格式化
        {
            string str = string.Format("姓名:{0}\n性别:{1}\n年龄:{2}\n", Name,Gander,Age);
            return str;
        }
    
     public override int GetHashCode()  //重写ToString()方法,也必须重写GetHashCode()方法
        {
            return base.GetHashCode();
        }
    
    
    12 类的嵌套 
        class a
        { ...
        class sub_a  
        //不管外部类型是类还是结构,嵌套类型均默认为 private,但是可以设置为 public、
          protected internal、protected、internal 或 private。
          {
             ...
          }
        }
        例如:
            big.small wrap = new big.small("zzl");
            Response.Write(wrap.ToString());
    class big
      {
       public  class small
        {
            public string Name { get; set; }
            public small(string name)
            {
                Name = name;
            }
            public override string ToString()
            {
                return string.Format("姓名是:{0}", Name);
            }
        }
    
    13 Lambda表达式的高级用法,where关键字
         例1:
           List<string> fruits =new List<string> { "1", "2", "3", "4", "5", "6", "7", "8" }; //定义一个list的string类型
           IEnumerable<string> query = fruits.Where(fruit => fruit.Contains('8'));//定义一个IEnumerable类型的字符串,它接收的值是fruits列表中的字符8,=> 是lambda关键字
           foreach (string fruit in query) //输出query列表中的每一个字符
             Response.Write(fruit);
         例2:
            string[] digits = { "1", "22", "333", "4444", "55555", "666666", "7777777"};
            var shortDigits = digits.Where(digit => digit.Length < 4); //判断每个字符的长度是否小于4
            Response.Write("<hr>");
            foreach (var digit in shortDigits)
            {
                Response.Write(digit+",");    
            }
            Response.Write("<hr>");
    
    14 LINQ实现对类的筛选器功能
          IEnumerable<string> x=new List<string> {"1","zzl","good"}; //为对象赋值
            
           foreach (var info in  x.ForUser("zzl"))   //从其中筛选zzl这个字符
            {
                Response.Write(info);
            }
    
    public static class filter
    {
        public static IEnumerable<string> ForUser(this IEnumerable<string> qry, string userName)   //这是一个字符的筛选功能,第1个能数是集合,它不是一个参数,第二个参数是要找的对象
        {
            return from a in qry
                   where
                       a.Contains(userName.ToLower())
                   select a;
    
        }
    
    }
    
    15  接口类型的变更://实际上,在程序中,接口类型的变量,它享有本接口的所有属性和方法,并且它继承它基类的所有方法
    interface a
    {
        string Name { get; set; }
        void Add();
    }
    
     interface b:a
    {
         string Password { get; set; }
    }
    class aclass : b
    {
        public string Name { get; set; }
        public string Password { get; set; }
        public aclass(string name,string pass)
        {
            Name = name;
            Password = pass;
        }
        public void Add()
        {
        }
    
    public a variable; // 定义一个接口类型的变更variable,接口为a
    variable.Name=...//为属性赋值
    variable.add();//调用方法
    16 定义接口的两种形式
        interface a
        {
        string name;
        void add();
        }
        class ac:a
        {
            public string name{get;set;}
            public void add()
            {...}
        }
    public a Ainstance {get;set;}
    也可以写成
    public a Ainstance 
    这时,VS智能提示为: a.name          a.Ainstance()
    
    17 在MVC中实现表单的验证
           [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Create(product pro)
            {
               // 表单验证
                if (String.IsNullOrEmpty(pro.productid.ToString()))
                {
                    ModelState.AddModelError("productid", "产品ID不能为空");
                }
                if (string.IsNullOrEmpty(pro.typeid.ToString()))
                {
                    ModelState.AddModelError("typeid", "类别不能为空");
                }
    
                if (ModelState.IsValid) //如果验证通过
                {
    
                    try
                    {
                        ProductRepository.Add(pro);
                        ProductRepository.Save();
                        return RedirectToAction("Details", new { id = pro.productid });
                    }
                    catch
                    {
                        return View();
                    }
    
                }
                else
                {
                    return View(); //如果不通过验证,就直接反回本页 
                }
            }
    
    
    18  MVC中的模型绑定 [Bind(include)] 和平[Bind(Exclude)] 
     Asp.Net MVC内置了两种不同的模型绑定功能,第一种是使用UpdateModel()更新一个已存在的模型对象的属性,
     第二种是传递模型对象,作为action方法的参数。这两种绑定的功能都相当强大。如下:
       第一种模型绑定
    
            [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Edit(int id, FormCollection formValues)
            {
                Dinners dinners = dinnerRepository.GetDinners(id);
    
                try
                {
                    UpdateModel(dinners);
                    dinnerRepository.Save();
                    return RedirectToAction("Details", new { id = dinners.DinnerID });
                }
                catch
                {
                    ModelState.AddRuleViolations(dinners.GetRuleViolations());
                    return View(dinners);
                }
            }
        第二种模型绑定
    
            [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Create(Dinners dinners)
            {
                if (ModelState.IsValid)
                {
                    try
                    {
                        dinners.HostedBy = "SomeUser";
                        dinnerRepository.Add(dinners);
                        dinnerRepository.Save();
                        return RedirectToAction("Details", new { id = dinners.DinnerID });
                    }
                    catch
                    {
                        ModelState.AddRuleViolations(dinners.GetRuleViolations());
                    }
                    
                }
                return View(dinners);
            }
       默认情况下,UpdateModel()方法试图根据匹配的表单参数值,更新所有的属性。同样的作为参数传递给action方法的模型对象,
       基于表单参数设置全部模型对象的属性。但是有时,我们根据显式的指定模型对象的部分属性可更新,此种做法称作模型绑定的
       锁定,可分为基于用途来锁定绑定和基于类型来锁定绑定两种方式。
        基于用途来锁定绑定,下面是针对第一种模型绑定的锁定方式:
            [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Edit(int id, FormCollection formValues)
            {
                Dinners dinners = dinnerRepository.GetDinners(id);
    
                //指定模型对象可更新的属性列表
                String[] allowPropery = new[] { "Title", "Description", "ContactPhone" };
    
                try
                {
                    //使用UpdateModel重载方法
                    UpdateModel(dinners,allowPropery);
                    dinnerRepository.Save();
                    return RedirectToAction("Details", new { id = dinners.DinnerID });
                }
                catch
                {
                    ModelState.AddRuleViolations(dinners.GetRuleViolations());
                    return View(dinners);
                }
            }
        第二种模型绑定的锁定方式:
            [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Create([Bind(Include="Title,Description,ContactPhone")]Dinners dinners)
            {
                if (ModelState.IsValid)
                {
                    try
                    {
                        dinners.HostedBy = "SomeUser";
                        dinnerRepository.Add(dinners);
                        dinnerRepository.Save();
                        return RedirectToAction("Details", new { id = dinners.DinnerID });
                    }
                    catch
                    {
                        ModelState.AddRuleViolations(dinners.GetRuleViolations());
                    }
                    
                }
                return View(dinners);
            }
    
        基于类型来锁定绑定
        基于类型来说锁定绑定,这样一旦制定绑定规则,就可以在所有Controller和Action中使用,
        包括UpdateModel方法和Action方法的参数。 通过添加[Bind]属性到类上,或者在应用程序
        中的Global.asax文件中(如果类型不是我们自定义的情况下,非常有用),来定制类型绑定规则。
        使用Bind属性的Include和Exclude属性来指定类或接口中的那些属性是可以绑定的。
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Linq;
    
    namespace NerdDinner.Models
    {
        [System.Web.Mvc.Bind(Include="Title,Description,ContactPhone")]
        public partial class Dinners
        {
           
        }
    }
     
     
  • 相关阅读:
    第十四周课程总结&实验报告(简单记事本的实现)
    第十三周课程总结
    第十二周课程总结
    第十一周课程总结
    第十周课程总结
    第九周课程总结&实验报告(七)
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
    第五周课程总结&实验报告(四)
    2019JAVA课程总结
  • 原文地址:https://www.cnblogs.com/lori/p/2126365.html
Copyright © 2011-2022 走看看