.NET MVC学习笔记二
1、.NET MVC页面加入缓存
1.1 方法一:输出缓存
在控制器代码前加上注解:[OutputCache(Duration=15)]。这里的15单位是秒。
例如:
[OutputCache(Duration=15)]
public ActionResult Index()
{
return View();
}
1.2 方法二:使用缓存配置文件
(1)在web.config文件<system.web>中加入以下配置:
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<addname="testcache"duration="10"enabled="true"location="ServerAndClient"varyByParam="none"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
(2)在要使用的action中加入要引用的缓存配置
[OutputCache(CacheProfile="testcache")]
public ActionResult Index()
{
return View();
}
2、读取excel内容
2.1 引入DLL
using System.Data.OleDb;
using System.Data;
2.2 方法一:将excel看作数据源来进行读取
string oleconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Test\\test.xls;Extended Properties='Excel 8.0;HDR=NO'";
// HDR=NO 无字段。
// HDR=YES 有字段,一般默认excel表中第1行的列标题为字段名。
OleDbConnection conn = newOleDbConnection(oleconn);
conn.Open();
string str_sql = "select * from [Sheet1$]";
OleDbDataAdapter oda = newOleDbDataAdapter(str_sql, conn);
DataSet ds = newDataSet();
oda.Fill(ds);
conn.Close();
2.2 方法二:使用datareader
string oleconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Test\\test.xls;Extended Properties='Excel 8.0;HDR=NO'";
string str_sql = "select * from [Sheet1$]";
OleDbConnection conn = newOleDbConnection(oleconn);
OleDbCommand od= newOleDbCommand();
od.Connection = conn;
od.CommandText = str_sql;
conn.Open();
OleDbDataReader reader= od.ExecuteReader();
while(reader.Read())
{
要读取的字段;
}
reader.Close();
conn.Close();
3、将数据导出为txt文件
FileStream fs = newFileStream("D:\\Test\\文件名.txt", FileMode.Create);
byte[] data = System.Text.Encoding.Default.GetBytes(要写入的数据);
//开始写入
fs.Write(data, 0, data.Length);
//清空缓冲区、关闭流
fs.Flush();
fs.Close();
4、分隔字符串
例如:字符串string test=“aabccbdde”;
想以b作为分隔
string[] sArray = Regex.Split(test, "b", RegexOptions.IgnoreCase);
5、截取字符串
例如: string test=”(123456)”;
想把左右两个括号去掉,只保留数字。
//截取左括号
stringtestSubL = test.Substring(1);
//截取右括号
string testSubR = testSubL.Substring(0,testSubL.Length-1);
6、log4net 记录MVC监控日志
6.1 下载log4net
地址:http://logging.apache.org/log4net/download_log4net.cgi
6.2 引用log4net.dll
将下载下来的程序,自行按照所需要的.net版本编译,编译完成,在项目中引用log4net.dll文件。
6.3 配置log4net
(1)在AssemblyInfo.cs最下面加入一行。
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
(2)在根目录下新建一个log4net.config文件。
<?xmlversion="1.0"encoding="utf-8" ?>
<configuration>
<configSections>
<sectionname="log4net"type="System.Configuration.IgnoreHandlerSection"/>
</configSections>
<log4net>
<appendername="console"type="log4net.Appender.ConsoleAppender"></appender>
<root>
<levelvalue="WARN" />
<appender-refref="LogFileAppender" />
</root>
<loggername="Test">
<levelvalue="DEBUG"/>
</logger>
<appendername="LogFileAppender"type="log4net.Appender.FileAppender">
<paramname="File"value="D:/Test/log.txt" />
<paramname="AppendToFile"value="true" />
<layouttype="log4net.Layout.PatternLayout">
<paramname="Header"value="[Header]/r/n"/>
<paramname="Footer"value="[Footer]/r/n"/>
<paramname="ConversionPattern"value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
</appender>
</log4net>
</configuration>
6.4 使用日志
og4net.ILog log = log4net.LogManager.GetLogger("Test");
log.Error("haha");
log.Info("log日志信息");
log.Debug("debug信息");
log.Error("error信息");
log.Warn("warn信息");
Exception ex = newException("测试的异常信息");
log.Fatal("fatal信息", ex);
7、Log4Net 日志文件按日期来命名
结合6,将log4net.config更改为如下内容
<?xmlversion="1.0"encoding="utf-8" ?>
<configuration>
<configSections>
<sectionname="log4net"type="System.Configuration.IgnoreHandlerSection"/>
</configSections>
<log4net>
<appendername="console"type="log4net.Appender.ConsoleAppender"></appender>
<root>
<levelvalue="WARN" />
<appender-refref="RollingLogFile" />
</root>
<loggername="Test">
<levelvalue="DEBUG"/>
</logger>
<appendername="RollingLogFile"type="log4net.Appender.RollingFileAppender">
<paramname="File"value="D:/Test/"/>
<paramname="AppendToFile"value="true"/>
<paramname="RollingStyle"value="Composite"/>
<paramname="DatePattern"value="yyyy-MM-dd".txt""/>
<paramname="PreserveLogFileNameExtension"value="true"/>
<paramname="StaticLogFileName"value="false"/>
<!--指定每个文件的最大值,超出容量就拆分-->
<maxSizeRollBackupsvalue="10" />
<paramname="MaximumFileSize"value="10KB"/>
<layouttype="log4net.Layout.PatternLayout">
<paramname="ConversionPattern"value="%date %-5level %logger message:%m%n"/>
</layout>
</appender>
</log4net>
</configuration>
8、Compare不明确的引用,问题解决
例如,如下model
[DataType(DataType.Password)]
[Display(Name = "确认密码")]
[Compare("NewPassword", ErrorMessage = "两次密码输入不一致。")]
publicstring ConfirmPassword { get; set; }
会报错误:
错误 9 “CompareAttribute”是“System.ComponentModel.DataAnnotations.CompareAttribute”和“System.Web.Mvc.CompareAttribute”之间的不明确的引用
解决方法:
[System.ComponentModel.DataAnnotations.Compare("Password", ErrorMessage = "两次密码输入不一致。")]
public string ConfirmPassword { get; set; }
9、“发现同一依赖程序集的不同版本间存在无法解决的冲突。当日志详细信息设置为“详细”时,这些引用冲突将会在生成日志中列出。”解决方法
9.1 VS2013,选择“工具”选项
9.2在左侧树中,选择 项目和解决方案 节点,然后选择 生成和运行
9.3在出现的工具/选项页中,设置 MSBuild项目生成输出的详细程度 水平 详细
10、分页算法
以操作mySql为例:
select * from 数据表limit(页码-1)*每页记录数,每页记录数
例:select * from 数据表limit 0,2;
11、格式良好的XML
11.1 每个开始标签必须有一个结束标签。
11.2 空元素必须以“/>”结束。
11.3 元素不能够交错但可以嵌套。
11.4 元素和特性必须使用一致的大小写。
11.5 一个元素不能够有两个特性同名。
11.6 一个元素可以包含两个同名的嵌套元素。
11.7 一个文档只可以有一个根元素。
11.8 所有特性在值的前后都要有引号。
11.9 注释不能放到标签中。
12、写入XML文件方法一
12.1 代码
using System.Xml;
String xmlFilePath = Server.MapPath("XMLTest.txt");
XmlTextWriter writer = new XmlTextWriter(xmlFilePath,Encoding.UTF8);
writer.Formatting = Formatting.Indented;
writer.Indentation = 3;
writer.WriteStartDocument();
//加入创建时间
writer.WriteComment("Created@ by jjyc.org "+DateTime.Now.ToString());
writer.WriteStartElement("父元素");
writer.WriteStartElement("子元素");
writer.WriteAttributeString("特性1","特性1的值");
writer.WriteAttributeString("特性2","特性2的值");
//关闭特性1
writer.WriteEndElement();
//关闭子元素
writer.WriteEndElement();
writer.Close();
12.2 结果如下:
<?xml version="1.0" encoding="utf-8"?>
<!--Created@ by jjyc.org 2016/1/26 9:46:41-->
<父元素>
<子元素 特性1="特性1的值" 特性2="特性2的值">
<标题>特性1下的标题</标题>
<详情>特性1下的详情</详情>
</子元素>
</父元素>
13、读取XML文件方法一
13.1 代码
结合上文生成的XMLTest.txt
String xmlFile = Server.MapPath("XMLTest.txt");
XmlTextReader reader = new XmlTextReader(xmlFile);
StringBuilder str = new StringBuilder();
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.XmlDeclaration:
str.Append("XML Declaration: <b>");
str.Append(reader.Name);
str.Append(" ");
str.Append("</b><br/>");
break;
case XmlNodeType.Element:
str.Append("Element :<b>");
str.Append(reader.Name);
str.Append("</b><br/>");
break;
case XmlNodeType.Text:
str.Append("- Value:<b>");
str.Append(reader.Value);
str.Append("</b><br/>");
break;
}
if (reader.AttributeCount > 0)
{
while (reader.MoveToNextAttribute())
{
str.Append("-Attribute:<b>");
str.Append(reader.Name);
str.Append("</b> Value:<b>");
str.Append(reader.Value);
str.Append("</b><br/>");
}
}
}
reader.Close();
13.2结果如下(已经转为HTML格式显示):
XML Declaration: xml
-Attribute:version Value:1.0
-Attribute:encoding Value:utf-8
Element :父元素
Element :子元素
-Attribute:特性1 Value:特性1的值
-Attribute:特性2 Value:特性2的值
Element :标题
- Value:特性1下的标题
Element :详情
- Value:特性1下的详情
14、 写入XML文件方法二
14.1 代码
XDocument doc = new XDocument(
new XDeclaration("1.0", "uft-8", "yes"),
new XComment("Created:" + DateTime.Now.ToString()),
new XElement("根节点",
new XElement("商品列表",
new XAttribute("商品ID", "A0001"),
new XAttribute("商品种类", "食品"),
new XElement("商品名称", "儿童车"),
new XElement("商品价格", "200.3"),
new XElement("商品详情",
new XElement("信息来源", "佳佳原创"),
new XElement("网址", "http://www.jjyc.org")
)
)
)
);
doc.Save(Server.MapPath("NewXMLTest.txt"));
14.2 生成的XML如下:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--Created:2016/1/27 11:55:08-->
<商品列表 商品ID="A0001" 商品种类="食品">
<商品名称>儿童车</商品名称>
<商品价格>200.3</商品价格>
<商品详情>
<信息来源>佳佳原创</信息来源>
<网址>http://www.jjyc.org</网址>
</商品详情>
</商品列表>
15 读取XML文件方法二
15.1 代码
string xmLFile = Server.MapPath("NewXMLTest.txt");
XDocument doc = XDocument.Load(xmLFile);
StringBuilder str = new StringBuilder();
foreach (XElement element in doc.Element("根节点").Elements())
{
str.Append("商品ID:"+(string)element.Attribute("商品ID").Value + "<br />");
str.Append("商品种类:"+(string)element.Attribute("商品种类").Value + "<br />");
str.Append("商品名称:" + (string)element.Element("商品名称") + "<br />");
str.Append("商品价格:" + String.Format("{0:C}",(decimal)element.Element("商品价格")) + "<br />");
foreach (XElement ele in element.Elements("商品详情"))
{
str.Append("信息来源:" + (string)ele.Element("信息来源") + "<br />");
str.Append("网址:" + (string)ele.Element("网址") + "<br />");
}
}
15.2结果如下(已经转为HTML格式显示):
商品ID:A0001
商品种类:食品
商品名称:儿童车
商品价格:¥200.30
信息来源:佳佳原创
网址:http://www.jjyc.org