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
{
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示